REST ۽ ورڪ فلو انجڻ جي بنياد تي آسان آرڪيسٽريشن لاءِ ڪيمنڊا استعمال ڪرڻ (ڪوبه جاوا)

اي حبر! مان توهان جي ڌيان ۾ مضمون جو ترجمو پيش ڪريان ٿو "ڪئمنڊا کي استعمال ڪرڻ ۾ آسان REST-بنياد آرڪيسٽريشن ۽ ڪم فلو انجڻ جي طور تي استعمال ڪريو (جاوا کي ڇڪڻ کان سواء)" Bernd Rücker پاران.

07.07.2020/XNUMX/XNUMX، ترجمو مضمون Bernd Rucker

REST ۽ ورڪ فلو انجڻ جي بنياد تي آسان آرڪيسٽريشن لاءِ ڪيمنڊا استعمال ڪرڻ (ڪوبه جاوا)

مان اڪثر غير جاوا ماڻهن سان مائڪرو سروس آرڪيٽيڪچر تي بحث ڪندو آهيان: C# ڊولپر، Node.JS/JavaScript ڊولپرز، يا Golang aficionados. انهن سڀني کي هن حقيقت سان منهن ڏيڻو پوي ٿو ته انهن کي مائڪرو سروس آرڪيٽيڪچر ۾ آرڪيسٽريشن ميڪنزم جي ضرورت آهي، يا ڪم جي فلو کي منظم ڪرڻ ۽ آرڊر ڪرڻ جي صلاحيت حاصل ڪرڻ، ٽائيم آئوٽ، ساگا ۽ معاوضي واري ٽرانزيڪشن جي ضرورت آهي.

BPM پليٽ فارم سان کليل ذريعو Camunda کان اهڙن ڪمن لاءِ وڏو. ڊولپر دوستي پيداوار جي اهم خاصيتن مان هڪ آهي. پر جيڪڏهن توهان ان جي دستاويزن تي نظر رکون ٿا، توهان شايد اهو تاثر حاصل ڪري سگهون ٿا ته ڪيمنڊا جي "دوستي" جو مقصد خاص طور تي جاوا ڊولپرز تي آهي. پليٽ فارم توهان جي پنهنجي افعال ۽ واڌارن کي ڳنڍڻ لاءِ ڪيترائي آپشن مهيا ڪري ٿو، پر اهو سڀ ڪجهه جاوا ۾ ڪيو ويو آهي. ڇا اهو واقعي آهي؟

نه! حقيقت ۾، توهان آساني سان هلائي سگهو ٿا ڪيمنڊا بغير ڪنهن جاوا جي ڄاڻ ۽ پنهنجي پسند جي ڪنهن به ٻولي ۾ ڪوڊ لاءِ آرڪيٽيڪچر سيٽ اپ ڪريو. هن مقالي ۾، اسين ڏسنداسين:

  • بنيادي فن تعمير؛
  • REST API
  • جاوا کان سواء ٻين ٻولين لاء موجوده ڪلائنٽ لائبريرين تي صلاح؛
  • مثال طور C# ۽ Node.JS استعمال ڪندي؛
  • ڪيمنڊا سرور شروع ڪرڻ جا طريقا (ڊاڪر يا ٽامڪٽ).

تعمير

ڪيمنڊا جاوا ۾ لکيل آهي ۽ هلائڻ لاءِ جاوا ورچوئل مشين (JVM) جي ضرورت آهي. ڪيمنڊا هڪ REST API مهيا ڪري ٿو جيڪا توهان کي اجازت ڏئي ٿي ته توهان ڪنهن به ٻولي ۾ لکڻ ۽ استعمال ڪريو REST سان Camunda:

REST ۽ ورڪ فلو انجڻ جي بنياد تي آسان آرڪيسٽريشن لاءِ ڪيمنڊا استعمال ڪرڻ (ڪوبه جاوا)

ڪيمنڊا ۾ ڪم فلوز بي پي ايم اين ۾ بيان ڪيا ويا آهن، جيڪو بنيادي طور تي هڪ XML فائل آهي. ان سان ماڊل ڪري سگهجي ٿو ڪيمنڊا ماڊلر.

اڳ ۾ ٺهيل ڊاکر تصوير ذريعي ڪيمنڊا کي هلائڻ

Camunda هلائڻ جو آسان طريقو Docker استعمال ڪرڻ آهي. ڪيمنڊا کي لانچ ڪرڻ جا متبادل طريقا ھن مضمون ۾ بعد ۾ بيان ڪيا ويا آھن.

REST ۽ ورڪ فلو انجڻ جي بنياد تي آسان آرڪيسٽريشن لاءِ ڪيمنڊا استعمال ڪرڻ (ڪوبه جاوا)

هن معاملي ۾، صرف هلائڻ:

  docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest

توهان کي لينڪس، JVMs يا Tomcats بابت پريشان ٿيڻ جي ضرورت ناهي. Dockerfiles ۽ بنيادي دستاويز (مثال طور، گهربل ڊيٽابيس سان ڳنڍڻ لاء هدايتون) موجود آهن GitHub.

جيڪڏھن توھان چاھيو ٿا Camunda Enterprise Edition کي توھان آساني سان تبديل ڪري سگھو ٿا Dockerfile.

بهرحال، ڊاڪر سان ڪيمنڊا کي هلائڻ جو هڪ منفي پاسو آهي: توهان ٽامڪٽ جي هڪ ورزن سان ختم ٿي ويندا جنهن ۾ هميشه جديد فيڪس شامل نه آهن. ھن جي چوڌاري ڪم ڪرڻ لاءِ، توھان ٺاھي سگھوٿا پنھنجي ڊاڪر تصوير جي بنياد تي مطلوب Tomcat تقسيم جي بنياد تي، جيئن ھن مثال ۾ ڏيکاريل آھي، يا ھيٺ بيان ڪيل حلن مان ھڪڙو استعمال ڪريو.

پروسيسنگ ماڊل جي جوڙجڪ

اچو ته هڪ مثال ڏسون ساگا ٽيمپليٽ استعمال ڪندي هڪ کلاسک ٽرپ بُڪنگ لاءِ جتي توهان ٽن عملن کي هڪ قطار ۾ ٽرگر ڪرڻ چاهيو ٿا ۽ بعد ۾ ناڪاميءَ جي صورت ۾ ڪاميابيءَ سان مڪمل ڪيل عملن جي مهربانيءَ سان معاوضو ڏيو. BPMN فارم ۾ نمائندگي ڪئي وئي، اهو هن طرح ڏسڻ ۾ اچي ٿو:

REST ۽ ورڪ فلو انجڻ جي بنياد تي آسان آرڪيسٽريشن لاءِ ڪيمنڊا استعمال ڪرڻ (ڪوبه جاوا)

هاڻي توهان استعمال ڪري سگهو ٿا REST API عمل جي ماڊل جي جوڙجڪ لاءِ. اچو ته چئو ته توھان ان کي محفوظ ڪريو trip.bpmn ۽ ڊاڪر ذريعي ڪيمنڊا کي ھلايو تنھنڪري اھو دستياب آھي localhost:8080:

  curl -w "n" 
-H "Accept: application/json" 
-F "deployment-name=trip" 
-F "enable-duplicate-filtering=true" 
-F "deploy-changed-only=true" 
-F "[email protected]" 
http://localhost:8080/engine-rest/deployment/creat

هاڻي توهان هلائي سگهو ٿا نئون ڪم فلو مثال REST API استعمال ڪندي ۽ ڊيٽا کي پاس ڪريو جيڪو توھان ڏسڻ چاھيو ٿا ڪم فلو مثال متغير:

  curl 
-H "Content-Type: application/json" 
-X POST 
-d '{"variables":{"someData" : {"value" : "someValue", "type": "String"}},"businessKey" : "12345"}}' 
http://localhost:8080/engine-rest/<!-- -->process-definition/key/<!-- -->FlowingTripBookingSaga<!-- -->/start

ايندڙ دلچسپ سوال اهو آهي ته: ڪيمنڊا ڪيئن ڪار جي بکنگ جي طريقيڪار کي ڪال ڪندو؟ ڪيمنڊا نه رڳو خدمتن کي فوري طور تي ڪال ڪري سگھي ٿو (Push-Principle) ڪجھ بلٽ ان استعمال ڪندي ڳنڍيندڙ، پر ڪم جي شين کي ھڪڙي قسم جي ترتيب ۾ ترتيب ڏيو. ڪم ڪندڙ وري REST ذريعي ڪم جون شيون آڻي سگھي ٿو، ڪم ڪري سگھي ٿو، ۽ ڪيمنڊا کي مڪمل ڪرڻ لاءِ چئي سگھي ٿو (Pull-Principle).

REST ۽ ورڪ فلو انجڻ جي بنياد تي آسان آرڪيسٽريشن لاءِ ڪيمنڊا استعمال ڪرڻ (ڪوبه جاوا)

تنهنڪري پهرين توهان کي عمل ڪرڻو پوندو fetchAndLock (ڇاڪاڻ ته ٻيا ڪارڪن هڪ ئي وقت سسٽم کي ماپڻ لاءِ ڪم وصول ڪري سگهن ٿا):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123","maxTasks":1,"usePriority":true,"topics":[{"topicName": "reserve-car"}, "lockDuration": 10000, "variables": ["someData"]}]}'<!-- --> 
http://localhost:8080/engine-rest/external-task/fetchAndLock

پوءِ ڪمنڊا کي ٻڌايو ڪم ڪندڙ ڪم مڪمل ڪيو (نوٽ ڪريو ته توهان کي داخل ٿيڻ گهرجي خارجي ٽاسڪ جي سڃاڻپ پهرين درخواست ۾ ملي):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123", "variables": {}}'<!-- --> 
http://localhost:8080/engine-rest/<!-- -->external-task/EXTERNAL_TASK_ID/complete

اھو اھو آھي - توھان اڃا تائين ڪنھن جاوا جي ضرورت نه ڪئي آھي، صحيح؟ ۽ اهو شروع ڪرڻ لاء ڪافي آهي!

ڪلائنٽ لائبريريون

REST API کي ڪال ڪرڻ ڪنهن به پروگرامنگ ٻولي ۾ آسان آهي. JavaScript ۾، اهو آساني سان JQuery استعمال ڪندي، ۽ C# ۾، System.Net.Http ۽ Newtonsoft.Json استعمال ڪندي. پر اهو وقت وٺندو. تنهنڪري توهان صرف ڪجهه ڪلائنٽ لائبريري استعمال ڪري سگهو ٿا.

هن وقت، ڪيترائي تيار ڪيل ڪلائنٽ لائبريريون موجود آهن:

  • جاوا اسڪرپٽ لنڪ. Camunda جي حمايت؛
  • جاوا: لنڪ. Camunda جي حمايت؛
  • سي #:لنڪ и لنڪ. اهي ٻئي منصوبا وچولي حالت ۾ آهن ۽ عملي طور تي غير فعال آهن، پر هڪ سٺي شروعاتي نقطي طور ڪم ڪري سگهن ٿا؛
  • PHP لنڪ - تمام مڪمل نه آھي ۽ جديد API تبديليون شامل نه آھي، پر مون کي پروجيڪٽ ڄاڻو ٿا جيڪي ان کي استعمال ڪن ٿا.

جاوا اسڪرپٽ ۽ جاوا جي استثنا سان، ڪلائنٽ لائبريريون پاڻ ڪيمنڊا پراڊڪٽ جو حصو نه آهن. اميد نه رکو ته اهي ڪيمنڊا جي سڀني REST API خاصيتن جي حمايت ڪن. صرف ان ڪري ته هڪ لائبريري ڪو خاص فنڪشن مهيا نه ڪندي آهي ان جو مطلب اهو ناهي ته اهو اتي ناهي، هميشه چيڪ ڪريو ڪيمنڊا جي REST API. ريفرنس پروجيڪٽ لائبريرين کي شروعاتي نقطي ۽ ٽيمپليٽ طور استعمال ڪندا آهن.

C# مثال

مٿين ڪلائنٽ لائبريري کي استعمال ڪندي، اسان صرف لکي سگھون ٿا:

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  // Deploy the BPMN XML file from the resources
  camunda.RepositoryService.Deploy("trip-booking", new List<object> {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Register workers
  registerWorker("reserve-car", externalTask => {
    // here you can do the real thing! Like a sysout :-)
    Console.WriteLine("Reserving car now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Cancelling car now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Reserving hotel now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Register more workers...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary<string, object>()
    {
      {"someBookingData", "..." }
    });

مڪمل طور تي ڪم ڪندڙ سورس ڪوڊ آن لائن ڳولي سگھجي ٿو: لنڪ. ٻيو مثال موجود آهي لنڪ.

مثال سان Node.js

  var Workers = require('camunda-worker-node');
  var workers = Workers('http://localhost:8080/engine-rest', {
    workerId: 'some-worker-id'
  });
  
  workers.registerWorker('reserve-car', [ 'someData' ], function(context, callback) {
    var someNewData = context.variables.someData + " - added something";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

وڌيڪ معلومات ويب سائيٽ تي ملي سگهي ٿي github.com

ڪيمنڊا لانچ ڪرڻ جا متبادل طريقا

ڪسٽم ڊاکر تصوير سان گڏ "ڪئمنڊا اسٽينڊل وار"

ڪيمنڊا کان اڳ ۾ ٺهيل ڊاڪر تصوير جي متبادل جي طور تي، توھان تيار ڪري سگھوٿا Tomcat پاڻ کي (مثال طور، سرڪاري Docker Tomcat تصويرن جي بنياد تي) ۽ پوءِ ڪيمنڊا کي ان ۾ ڪاپي ڪري سگھو ٿا ھڪڙي نام نہاد WAR فائلن جي طور تي.

REST ۽ ورڪ فلو انجڻ جي بنياد تي آسان آرڪيسٽريشن لاءِ ڪيمنڊا استعمال ڪرڻ (ڪوبه جاوا)

جيڪڏهن توهان وٽ ڪيترائي اضافي گهرجن آهن ۽ هڪ جاوا تعمير ماحول قائم ڪري سگهو ٿا، توهان پڻ سيٽ ڪري سگهو ٿا ڪيمنڊا اسٽينڊل جنگ. انهن مثالن وانگر هڪ Maven تعمير سيٽ اپ ڪريو: تعمير جنگ جي ترتيب سان Maven يا اسيمبلي اوورلي سان ميون.

Camunda Tomcat ورهائڻ شروع ڪيو

ٻيو اختيار صرف ڊائون لوڊ ڪرڻ آهي Camunda Tomcat تقسيم، ان کي زپ ڪريو، ۽ ان کي هلائي. اهو صرف توهان جي ڪمپيوٽر تي Java Runtime Environment (JRE) انسٽال ڪرڻ جي ضرورت آهي. اهو آساني سان ٿي سگهي ٿو هتي کان ڊائونلوڊ ڪريو.

REST ۽ ورڪ فلو انجڻ جي بنياد تي آسان آرڪيسٽريشن لاءِ ڪيمنڊا استعمال ڪرڻ (ڪوبه جاوا)

ڊيٽابيس کي تبديل ڪرڻ يا ٻيو ڪجهه ڪرڻ لاءِ توهان کي Tomcat وانگر ترتيب ڏيڻ جي ضرورت آهي دستاويز ۾ بيان ڪيو ويو آهي. مون کي خبر آهي Tomcat شايد پيچيده آواز، پر اهو اصل ۾ تمام سادو آهي. ۽ گوگل ڄاڻي ٿو هر شي جا جواب جيڪي پروسيس ۾ گهربل هجن.

Tomcat استعمال ڪندي ڪيمنڊا کي هلائڻ

آخري متبادل اهو آهي ته ٽامڪٽ پاڻ کي سيٽ ڪريو ۽ ان ۾ ڪيمنڊا انسٽال ڪريو، انسٽاليشن جي وضاحت جي پٺيان. اهو توهان کي اختيار ڏيندو ته توهان Tomcat جو جيڪو به نسخو استعمال ڪرڻ چاهيو ٿا، يا ان کي انسٽال ڪريو ونڊوز سروس جي طور تي، مثال طور.

ڪيمنڊا کي پيداوار ۾ آڻڻ

اهو عام طور تي ڪيمنڊا کي هلائڻ لاء ڪجهه حتمي سيٽ اپ جي ضرورت هوندي. ڪيمنڊا ۾ ھدايتون آھن جيڪي ھن کي وڏي تفصيل سان بيان ڪن ٿيون، پر مان ھن مضمون ۾ انھن ۾ نه ويندس - مان صرف ھڪڙو مثال ڏيندس: تقسيم جي REST API ڊفالٽ جي تصديق لاءِ ترتيب ڏنل نه آھي. توھان شايد ھن کي تبديل ڪرڻ چاھيو ٿا.

ويٺو آهي

جئين توهان ڏسي سگهو ٿا، Camunda سان شروع ڪرڻ تمام آسان آهي، قطع نظر توهان جيڪا ٻولي استعمال ڪري رهيا آهيو. اهم نقطو اهو آهي ته سڀ رابطو ڪيو ويندو آهي REST API ذريعي. تنصيب تمام آسان آهي، خاص طور تي جڏهن استعمال ڪندي Docker.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو