REST اور ورک فلو انجن (کوئی جاوا نہیں) پر مبنی آسان آرکیسٹریشن کے لیے کیمونڈا کا استعمال

ارے حبر! مضمون کا ترجمہ آپ کی توجہ میں پیش کرتا ہوں۔ "کیمونڈا کو استعمال میں آسان REST پر مبنی آرکیسٹریشن اور ورک فلو انجن کے طور پر استعمال کریں (جاوا کو چھوئے بغیر)" Bernd Rücker کی طرف سے.

07.07.2020/XNUMX/XNUMX، ترجمہ مضامین برنڈ روکر

REST اور ورک فلو انجن (کوئی جاوا نہیں) پر مبنی آسان آرکیسٹریشن کے لیے کیمونڈا کا استعمال

میں اکثر غیر جاوا لوگوں کے ساتھ مائیکرو سروس فن تعمیر پر بات کرتا ہوں: C# ڈویلپرز، Node.JS/JavaScript ڈویلپرز، یا Golang aficionados۔ ان سب کو اس حقیقت کا سامنا ہے کہ انہیں مائیکرو سروس آرکیٹیکچر میں آرکیسٹریشن میکانزم کی ضرورت ہے، یا ورک فلو کو ہموار کرنے اور آرڈر کرنے، ٹائم آؤٹ کو سنبھالنے، ساگا اور معاوضہ لین دین کی صلاحیت حاصل کرنے کے لیے صرف ایک ٹول کی ضرورت ہے۔

بی پی ایم پلیٹ فارم کے ساتھ کیمونڈا سے اوپن سورس اس طرح کے کاموں کے لئے بہت اچھا. ڈویلپر دوستی مصنوعات کی اہم خصوصیات میں سے ایک ہے۔ لیکن اگر آپ اس کی دستاویزات کو دیکھیں تو آپ کو یہ تاثر مل سکتا ہے کہ کیمونڈا کی "دوستی" بنیادی طور پر جاوا ڈویلپرز کے لیے ہے۔ پلیٹ فارم آپ کے اپنے فنکشنز اور ایکسٹینشنز کو جوڑنے کے لیے بہت سے اختیارات فراہم کرتا ہے، لیکن یہ سب جاوا میں ہوتا ہے۔ کیا یہ واقعی ہے؟

نہیں! درحقیقت، آپ بغیر کسی جاوا کے علم کے آسانی سے Camunda چلا سکتے ہیں اور اپنی پسند کی کسی بھی زبان میں کوڈ کے لیے فن تعمیر ترتیب دے سکتے ہیں۔ اس مضمون میں، ہم دیکھیں گے:

  • بنیادی فن تعمیر؛
  • REST API
  • جاوا کے علاوہ دیگر زبانوں کے لیے موجودہ کلائنٹ لائبریریوں کے بارے میں مشورہ؛
  • مثال کے طور پر C# اور Node.JS کا استعمال کرتے ہوئے؛
  • کیمونڈا سرور (ڈوکر یا ٹامکیٹ) کو شروع کرنے کے طریقے۔

فن تعمیر

Camunda جاوا میں لکھا گیا ہے اور اسے چلانے کے لیے جاوا ورچوئل مشین (JVM) کی ضرورت ہے۔ Camunda ایک REST API فراہم کرتا ہے جو آپ کو اپنی پسند کی کسی بھی زبان میں لکھنے اور Camunda کے ساتھ REST استعمال کرنے کی اجازت دیتا ہے:

REST اور ورک فلو انجن (کوئی جاوا نہیں) پر مبنی آسان آرکیسٹریشن کے لیے کیمونڈا کا استعمال

کامونڈا میں ورک فلو کی وضاحت BPMN میں کی گئی ہے، جو بنیادی طور پر ایک XML فائل ہے۔ اس کے ساتھ ماڈلنگ کی جا سکتی ہے۔ کیمونڈا ماڈلر.

پہلے سے بنی ڈوکر امیج کے ذریعے کیمونڈا کو چلانا

Camunda کو چلانے کا سب سے آسان طریقہ Docker استعمال کرنا ہے۔ کیمونڈا کو لانچ کرنے کے متبادل طریقے بعد میں اس مضمون میں بیان کیے گئے ہیں۔

REST اور ورک فلو انجن (کوئی جاوا نہیں) پر مبنی آسان آرکیسٹریشن کے لیے کیمونڈا کا استعمال

اس صورت میں، صرف چلائیں:

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

آپ کو لینکس، JVMs یا Tomcats کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔ ڈاکر فائلز اور بنیادی دستاویزات (مثال کے طور پر، مطلوبہ ڈیٹا بیس سے منسلک ہونے کی ہدایات) پر دستیاب ہیں۔ Github کے.

اگر آپ Camunda Enterprise Edition چلانا چاہتے ہیں تو آپ آسانی سے تبدیل کر سکتے ہیں۔ ڈاکر فائل.

تاہم، Docker کے ساتھ Camunda چلانے کا ایک منفی پہلو ہے: آپ Tomcat کے ایک ایسے ورژن کے ساتھ ختم ہوں گے جس میں ہمیشہ تازہ ترین اصلاحات شامل نہیں ہوتی ہیں۔ اس کے ارد گرد کام کرنے کے لیے، آپ مطلوبہ Tomcat ڈسٹری بیوشن کی بنیاد پر اپنی ڈوکر امیج بنا سکتے ہیں، جیسا کہ اس مثال میں دکھایا گیا ہے، یا ذیل میں بیان کردہ حلوں میں سے ایک استعمال کریں۔

عمل ماڈل کی تعیناتی

آئیے ایک کلاسک ٹرپ بکنگ کے لیے ساگا ٹیمپلیٹ کا استعمال کرتے ہوئے ایک مثال دیکھیں جہاں آپ لگاتار تین ایکشنز کو متحرک کرنا چاہتے ہیں اور بعد میں ناکامی کی صورت میں کامیابی کے ساتھ مکمل کیے گئے اعمال کی تلافی کرنا چاہتے ہیں۔ BPMN فارم میں نمائندگی، یہ اس طرح لگتا ہے:

REST اور ورک فلو انجن (کوئی جاوا نہیں) پر مبنی آسان آرکیسٹریشن کے لیے کیمونڈا کا استعمال

اب آپ استعمال کر سکتے ہیں۔ پروسیس ماڈل کی تعیناتی کے لیے REST API. ہم کہتے ہیں کہ آپ اسے trip.bpmn کے بطور محفوظ کرتے ہیں اور Docker کے ذریعے Camunda چلاتے ہیں تاکہ یہ 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

اگلا دلچسپ سوال یہ ہے کہ: کیمونڈا کار کی بکنگ جیسے طریقہ کار کو کیسے کال کرتا ہے؟ Camunda کچھ بلٹ ان کا استعمال کرتے ہوئے نہ صرف سروسز کو فوری طور پر کال کر سکتا ہے (Push-principle) کنیکٹر، بلکہ کام کی اشیاء کو ایک قسم کی بلٹ ان آرڈر میں ڈالیں۔ اس کے بعد کارکن REST کے ذریعے کام کی اشیاء لے سکتا ہے، کام انجام دے سکتا ہے، اور Camunda کو مکمل کرنے کے لیے کہہ سکتا ہے (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 کو کال کرنا آسان ہے۔ جاوا اسکرپٹ میں، یہ آسانی سے JQuery اور C# میں System.Net.Http اور Newtonsoft.Json کا استعمال کرتے ہوئے کیا جاتا ہے۔ لیکن اس میں وقت لگے گا۔ لہذا آپ صرف کچھ کلائنٹ لائبریری استعمال کرسکتے ہیں۔

اس وقت، کئی ریڈی میڈ کلائنٹ لائبریریاں دستیاب ہیں:

  • جاوا اسکرپٹ: لنک. Camunda کی طرف سے حمایت یافتہ؛
  • جاوا: لنک. Camunda کی طرف سے حمایت یافتہ؛
  • C #:لنک и لنک. یہ دونوں منصوبے درمیانی حالت میں ہیں اور عملی طور پر غیر فعال ہیں، لیکن ایک اچھے نقطہ آغاز کے طور پر کام کر سکتے ہیں۔
  • پی ایچ پی: لنک - زیادہ مکمل نہیں ہے اور اس میں API کی تازہ ترین تبدیلیاں شامل نہیں ہیں، لیکن میں ایسے پروجیکٹوں کو جانتا ہوں جو اسے استعمال کرتے ہیں۔

JavaScript اور Java کے استثنا کے ساتھ، کلائنٹ کی لائبریریاں خود Camunda پروڈکٹ کا حصہ نہیں ہیں۔ ان سے توقع نہ کریں کہ وہ Camunda کی تمام REST API خصوصیات کو سپورٹ کریں گے۔ صرف اس وجہ سے کہ لائبریری کوئی خاص فنکشن فراہم نہیں کرتی ہے اس کا مطلب یہ نہیں ہے کہ وہ وہاں نہیں ہے، ہمیشہ Camunda کا 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();

مزید معلومات ویب سائٹ پر مل سکتی ہیں۔ گیتوب

کیمونڈا کو لانچ کرنے کے متبادل طریقے

"Camunda standalone WAR" کے ساتھ اپنی مرضی کے مطابق ڈاکر کی تصویر

Camunda سے پہلے سے تیار کردہ Docker امیج کے متبادل کے طور پر، آپ Tomcat کو خود تیار کر سکتے ہیں (مثال کے طور پر، آفیشل Docker Tomcat امیجز پر مبنی) اور پھر Camunda کو اس میں ایک نام نہاد WAR فائلوں کے طور پر کاپی کر سکتے ہیں۔

REST اور ورک فلو انجن (کوئی جاوا نہیں) پر مبنی آسان آرکیسٹریشن کے لیے کیمونڈا کا استعمال

اگر آپ کے پاس بہت سے اضافی تقاضے ہیں اور آپ جاوا کی تعمیر کا ماحول قائم کر سکتے ہیں، تو آپ کیمونڈا اسٹینڈ لون وار بھی ترتیب دے سکتے ہیں۔ ان مثالوں کی طرح ایک ماون بلڈ سیٹ اپ کریں: build جنگی ترتیب کے ساتھ ماون یا اسمبلی اوورلے کے ساتھ Maven.

Camunda Tomcat کی تقسیم شروع ہو رہی ہے۔

دوسرا آپشن یہ ہے کہ کیمونڈا ٹامکیٹ ڈسٹری بیوشن کو صرف ڈاؤن لوڈ کریں، اسے ان زپ کریں اور اسے چلائیں۔ اس کے لیے آپ کے کمپیوٹر پر صرف Java Runtime Environment (JRE) انسٹال ہونا ضروری ہے۔ یہ آسانی سے ہوسکتا ہے۔ یہاں سے ڈاؤن لوڈ کریں۔.

REST اور ورک فلو انجن (کوئی جاوا نہیں) پر مبنی آسان آرکیسٹریشن کے لیے کیمونڈا کا استعمال

ڈیٹا بیس کو تبدیل کرنے یا کچھ اور کرنے کے لیے آپ کو Tomcat جیسے کنفیگر کرنے کی ضرورت ہے۔ دستاویزات میں بیان کیا گیا ہے۔. میں جانتا ہوں کہ Tomcat پیچیدہ لگ سکتا ہے، لیکن یہ اصل میں بہت آسان ہے۔ اور گوگل ہر اس چیز کے جوابات جانتا ہے جس کی اس عمل میں ضرورت ہو سکتی ہے۔

Tomcat کا استعمال کرتے ہوئے Camunda چلانا

آخری متبادل یہ ہے کہ ٹام کیٹ کو خود سیٹ کریں اور اس میں کیمونڈا انسٹال کریں، تنصیب کی تفصیل کے بعد. یہ آپ کو اختیار دے گا کہ آپ Tomcat کا جو بھی ورژن پسند کریں اسے استعمال کریں، یا اسے ونڈوز سروس کے طور پر انسٹال کریں، مثال کے طور پر۔

کیمونڈا کو پروڈکشن میں لانچ کرنا

یہ عام طور پر کیمونڈا کو چلانے کے لیے کچھ حتمی سیٹ اپ کی ضرورت ہوگی۔ کیمونڈا میں ایسی رہنما خطوط موجود ہیں جو اس کو بڑی تفصیل سے بیان کرتی ہیں، لیکن میں اس مضمون میں ان میں نہیں جاؤں گا - میں صرف ایک مثال کا نام دوں گا: تقسیم کا REST API بطور ڈیفالٹ تصدیق کے لیے ترتیب نہیں دیا گیا ہے۔ آپ اسے تبدیل کرنا چاہیں گے۔

میزانی اپ

جیسا کہ آپ دیکھ سکتے ہیں، Camunda کے ساتھ شروع کرنا بہت آسان ہے، قطع نظر اس کے کہ آپ جو بھی زبان استعمال کر رہے ہیں۔ اہم نکتہ یہ ہے کہ تمام تعامل REST API کے ذریعے کیا جاتا ہے۔ تنصیب بھی بہت آسان ہے، خاص طور پر جب ڈوکر کا استعمال کریں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں