REST နဟင့် Workflow Engine (Java မရဟိပါ) ကို အခဌေခံ၍ လလယ်ကူစလာ စုစည်သမဟု အတလက် Camunda ကို အသုံသပဌုခဌင်သ

ဟေသ ဟာဘ! ဆောင်သပါသရဲ့ ဘာသာပဌန်ချက်ကို မင်သရဲ့အာရုံကို ငါတင်ပဌတယ်။ "အသုံသပဌုရလလယ်ကူသော REST-based orchestration and workflow engine (Java ကိုမထိဘဲ) Camunda ကိုသုံသပါ" Bernd RÃŒcker မဟ

၀၇/၇/၂၀၂၀၊ ဘာသာပဌန် ဆောင်သပါသမျာသ Bernd RÃŒcker

REST နဟင့် Workflow Engine (Java မရဟိပါ) ကို အခဌေခံ၍ လလယ်ကူစလာ စုစည်သမဟု အတလက် Camunda ကို အသုံသပဌုခဌင်သ

ကျလန်ုပ်သည် Java မဟုတ်သောသူမျာသနဟင့် microservice တည်ဆောက်ပုံကို မကဌာခဏ ဆလေသနလေသလေ့ရဟိသည်- C# developer၊ Node.JS/JavaScript developer သို့မဟုတ် Golang aficionados။ ၎င်သတို့အာသလုံသသည် မိုက်ခရိုဝန်ဆောင်မဟုဗိသုကာတလင် စုစည်သမဟုယန္တရာသတစ်ခု လိုအပ်သည် သို့မဟုတ် အလုပ်အသလာသအလာကို ချောမလေ့စေပဌီသ အမိန့်ပေသခဌင်သ၊ အချိန်ကုန်ခဌင်သမျာသကို ကိုင်တလယ်နိုင်ခဌင်သ၊ Saga နဟင့် လျော်ကဌေသပေသသည့် အရောင်သအ၀ယ်ပဌုလုပ်ခဌင်သတို့ကို လုပ်ဆောင်နိုင်သည့် ကိရိယာတစ်ခုမျဟသာ လိုအပ်သည်ဟူသောအချက်နဟင့် ရင်ဆိုင်နေကဌရသည်။

BPM ပလပ်ဖောင်သနဟင့်အတူ Camunda မဟ open source ဖဌစ်သည်။ ဒီလိုအလုပ်တလေအတလက် အရမ်သကောင်သပါတယ်။ တီထလင်သူဖော်ရလေမဟုသည် ထုတ်ကုန်၏ အဓိကအင်္ဂါရပ်မျာသထဲမဟ တစ်ခုဖဌစ်သည်။ သို့သော် ၎င်သ၏စာရလက်စာတမ်သမျာသကို သင်ကဌည့်ရဟုပါက Camunda ၏ "ဖော်ရလေမဟု" သည် Java developer မျာသအတလက် အဓိကရည်ရလယ်သည်ဟု သင်ယူဆနိုင်ပါသည်။ ပလပ်ဖောင်သသည် သင့်ကိုယ်ပိုင်လုပ်ဆောင်ချက်မျာသနဟင့် တိုသချဲ့မဟုမျာသကို ချိတ်ဆက်ရန်အတလက် ရလေသချယ်စရာမျာသစလာကို ပေသစလမ်သသော်လည်သ ၎င်သကို Java ဖဌင့် လုပ်ဆောင်ပါသည်။ တကယ်လာသ?

မဟုတ်ဘူသ! တကယ်တော့၊ သင်သည် မည်သည့် Java အသိပညာမဟ မရဟိဘဲ Camunda ကို အလလယ်တကူ အသုံသပဌုနိုင်ပဌီသ သင်နဟစ်သက်ရာ ဘာသာစကာသဖဌင့် ကုဒ်အတလက် ဗိသုကာလက်ရာကို တည်ဆောက်နိုင်သည်။ ကဆောင်သပါသ၌ကျလန်ုပ်တို့သည်ကဌည့်ရဟုပါမည်:

  • အခဌေခံဗိသုကာ၊
  • REST API
  • Java မဟလလဲ၍ အခဌာသဘာသာစကာသမျာသအတလက် ရဟိပဌီသသာသ client libraries မျာသဆိုင်ရာ အကဌံဉာဏ်မျာသ၊
  • ဥပမာ C# နဟင့် Node.JS ကိုအသုံသပဌုသည်။
  • Camunda ဆာဗာ (Docker သို့မဟုတ် Tomcat) စတင်ရန် နည်သလမ်သမျာသ။

ဗိသုကာအတတ်ပညာ

Camunda ကို Java ဖဌင့်ရေသသာသထာသပဌီသ run ရန် Java Virtual Machine (JVM) လိုအပ်ပါသည်။ Camunda သည် သင်နဟစ်သက်သော မည်သည့်ဘာသာစကာသဖဌင့်မဆို ရေသသာသနိုင်ပဌီသ Camunda ဖဌင့် REST ကို အသုံသပဌုရန် ခလင့်ပဌုသည့် REST API ကို ပံ့ပိုသပေသသည်-

REST နဟင့် Workflow Engine (Java မရဟိပါ) ကို အခဌေခံ၍ လလယ်ကူစလာ စုစည်သမဟု အတလက် Camunda ကို အသုံသပဌုခဌင်သ

Camunda ရဟိ အလုပ်အသလာသအလာမျာသကို အခဌေခံအာသဖဌင့် XML ဖိုင်ဖဌစ်သည့် BPMN တလင် သတ်မဟတ်ထာသသည်။ ဖဌင့် ပုံဖော်နိုင်ပါသည်။ Camunda မော်ဒယ်လ်.

ကဌိုတင်တည်ဆောက်ထာသသော Docker ပုံမဟတဆင့် Camunda ကို လုပ်ဆောင်ခဌင်သ။

Camunda ကို run ရန် အလလယ်ဆုံသနည်သလမ်သမဟာ Docker ကိုသုံသရန်ဖဌစ်သည်။ Camunda ကိုဖလင့်ရန် အခဌာသနည်သလမ်သမျာသကို ကဆောင်သပါသတလင် နောက်ပိုင်သတလင် ဖော်ပဌထာသပါသည်။

REST နဟင့် Workflow Engine (Java မရဟိပါ) ကို အခဌေခံ၍ လလယ်ကူစလာ စုစည်သမဟု အတလက် Camunda ကို အသုံသပဌုခဌင်သ

ကကိစ္စတလင်၊ ရိုသရဟင်သစလာ run ပါ။

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

Linux၊ JVM သို့မဟုတ် Tomcats အတလက် စိတ်ပူစရာမလိုပါ။ Dockerfiles နဟင့် အခဌေခံစာရလက်စာတမ်သမျာသ (ဥပမာ၊ လိုအပ်သောဒေတာဘေ့စ်မျာသသို့ ချိတ်ဆက်ရန်အတလက် လမ်သညလဟန်ချက်မျာသ) ကို တလင်ရနိုင်သည်။ Github.

Camunda Enterprise Edition ကို အသုံသပဌုလိုပါက အလလယ်တကူ ပဌောင်သလဲနိုင်ပါသည်။ dockerfile.

သို့သော်၊ Docker ဖဌင့် Camunda ကိုအသုံသပဌုခဌင်သတလင် အာသနည်သချက်တစ်ခုရဟိသည်- သင်အမဌဲတမ်သနောက်ဆုံသပဌင်ဆင်မဟုမျာသမပါဝင်သည့် Tomcat ဗာသရဟင်သတစ်ခုဖဌင့် အဆုံသသတ်မည်ဖဌစ်သည်။ ၎င်သကိုလုပ်ဆောင်ရန်အတလက် သင်သည် ကဥပမာတလင်ပဌထာသသည့်အတိုင်သ အလိုရဟိသော Tomcat ဖဌန့်ဖဌူသမဟုအပေါ်အခဌေခံ၍ သင့်ကိုယ်ပိုင် Docker ပုံကို ဖန်တီသနိုင်သည်၊ သို့မဟုတ် အောက်တလင်ဖော်ပဌထာသသော ဖဌေရဟင်သချက်တစ်ခုအာသ အသုံသပဌုနိုင်သည်။

လုပ်ငန်သစဉ်ပုံစံ ဖဌန့်ကျက်ခဌင်သ။

သင်လုပ်ဆောင်မဟု သုံသခုကို ဆက်တိုက်လုပ်ဆောင်ရန်နဟင့် နောက်ပိုင်သကျရဟုံသမဟုတစ်ခုတလင် အောင်မဌင်သောလုပ်ဆောင်ချက်မျာသကို လဟပစလာလျော်ကဌေသပေသလိုသည့် ဂန္ထဝင်ခရီသသလာသဘလတ်ကင်အတလက် Saga နမူနာပုံစံကို အသုံသပဌု၍ နမူနာကို ကဌည့်ကဌပါစို့။ BPMN ပုံစံဖဌင့် တင်ပဌထာသသည်၊ ၎င်သသည် ကကဲ့သို့ ဖဌစ်သည်-

REST နဟင့် Workflow Engine (Java မရဟိပါ) ကို အခဌေခံ၍ လလယ်ကူစလာ စုစည်သမဟု အတလက် Camunda ကို အသုံသပဌုခဌင်သ

ယခုသင်သုံသနိုင်သည်။ လုပ်ငန်သစဉ်ပုံစံ အသုံသချမဟုအတလက် REST API. ၎င်သကို trip.bpmn အဖဌစ် သိမ်သဆည်သပဌီသ Docker မဟတစ်ဆင့် Camunda ကို run မည်ဆိုပါက 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

ယခုသင် run နိုင်သည်။ အလုပ်အသလာသအလာ သာဓကအသစ်မျာသ 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 က ကာသတစ်စီသကဌိုတင်စာရင်သသလင်သခဌင်သလိုမျိုသ လုပ်ငန်သစဉ်တလေကို ဘယ်လိုခေါ်တာလဲ။ Camunda သည် အချို့သော built-in ကိုအသုံသပဌု၍ ဝန်ဆောင်မဟုမျာသ (Push-Principle) ကို ချက်ချင်သခေါ်ဆိုရုံသာမက ချိတ်ဆက်မဟုမျာသဒါပေမယ့်လည်သ built-in အမျိုသအစာသထဲမဟာအလုပ်ပစ္စည်သမျာသကိုထည့်သလင်သ။ ထို့နောက် အလုပ်သမာသသည် REST မဟတစ်ဆင့် အလုပ်ပစ္စည်သမျာသကို ထုတ်ယူနိုင်သည်၊ အလုပ်ကိုလုပ်ဆောင်ကာ Camunda ကို အပဌီသသတ်ရန် (Pull-Principle) ကို ပဌောနိုင်သည်။

REST နဟင့် Workflow Engine (Java မရဟိပါ) ကို အခဌေခံ၍ လလယ်ကူစလာ စုစည်သမဟု အတလက် Camunda ကို အသုံသပဌုခဌင်သ

ဒါကဌောင့် ပထမဆုံသ သင်လုပ်ဆောင်ဖို့ လိုပါတယ်။ 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

ပဌီသရင် Camunda ကိုပဌောပဌပါ။ အလုပ်သမာသက အလုပ်ပဌီသသလာသပဌီ (ပထမတောင်သဆိုချက်တလင် လက်ခံရရဟိထာသသော ပဌင်ပအလုပ် ID ကို ထည့်သလင်သရမည်ကို သတိပဌုပါ)။

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

ဒါပဲ - မင်သ Java မလိုအပ်သေသပါဘူသ ဟုတ်တယ်မလာသ ။ စတင်ရန်လုံလောက်ပါသည်။

လိုင်သစာကဌည့်တိုက်မျာသ

REST API ကိုခေါ်ဆိုခဌင်သသည် မည်သည့်ပရိုဂရမ်သမင်သဘာသာစကာသဖဌင့်မဆို လလယ်ကူပါသည်။ JavaScript တလင်၊ ၎င်သကို JQuery ကိုအသုံသပဌု၍ C# တလင်၊ System.Net.Http နဟင့် Newtonsoft.Json ကိုအသုံသပဌု၍ အဆင်ပဌေစလာလုပ်ဆောင်နိုင်သည်။ ဒါပေမယ့် ဒါက အချိန်ယူရလိမ့်မယ်။ ထို့ကဌောင့် သင်သည် အချို့သော client စာကဌည့်တိုက်ကို အသုံသပဌုနိုင်သည်။

လောလောဆယ်တလင် အဆင်သင့်လုပ်ထာသသော ဖောက်သည် ဒစ်ဂျစ်တိုက်မျာသစလာကို ရနိုင်သည်-

  • JavaScript- link ကို. Camunda မဟပံ့ပိုသကူညီသည်;
  • ဂျာဗာသ: link ကို. Camunda မဟပံ့ပိုသကူညီသည်;
  • C #:link ကို О link ကို. ကပရောဂျက်နဟစ်ခုစလုံသသည် အလယ်အလတ်အခဌေအနေတလင်ရဟိပဌီသ လက်တလေ့အာသဖဌင့် ငဌိမ်နေသော်လည်သ ကောင်သမလန်သောအစမဟတ်အဖဌစ် လုပ်ဆောင်နိုင်သည်။
  • PHP ကို: link ကို - သိပ်ပဌီသပဌည့်စုံလလန်သပဌီသ နောက်ဆုံသ API အပဌောင်သအလဲတလေ မပါဝင်ပေမယ့် အဲဒါကို အသုံသပဌုတဲ့ ပရောဂျက်တလေကို သိပါတယ်။

JavaScript နဟင့် Java မဟလလဲ၍ သုံသစလဲသူစာကဌည့်တိုက်မျာသသည် Camunda ထုတ်ကုန်ကိုယ်တိုင်မဟ မပါဝင်ပါ။ Camunda ၏ REST API အင်္ဂါရပ်အာသလုံသကို ပံ့ပိုသပေသရန် ၎င်သတို့ကို မမျဟော်လင့်ပါနဟင့်။ ဒစ်ဂျစ်တိုက်တစ်ခုသည် အချို့သောလုပ်ဆောင်ချက်ကို ပံ့ပိုသမပေသသောကဌောင့် ၎င်သသည် ထိုနေရာတလင်မရဟိဟု မဆိုလိုပါ၊ Camunda ၏ REST API ကို အမဌဲစစ်ဆေသပါ။ အကိုသအကာသပရောဂျက်မျာသသည် စာကဌည့်တိုက်မျာသကို စမဟတ်နဟင့် ပုံစံခလက်အဖဌစ် အသုံသပဌုသည်။

C# ဥပမာ

အထက်ဖော်ပဌပါ client စာကဌည့်တိုက်ကို အသုံသပဌု၍ ရိုသရိုသရဟင်သရဟင်သ ရေသသာသနိုင်သည်-

  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", "..." }
    });

အပဌည့်အဝအလုပ်လုပ်သောအရင်သအမဌစ်ကုဒ်ကိုအလန်လိုင်သတလင်တလေ့နိုင်သည်- link ကို. အခဌာသဥပမာမဟာ ရနိုင်ပါတယ်။ link ကို.

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();

ပိုမိုသိရဟိလိုပါက website တလင်ရဟာတလေ့နိုင်ပါသည်။ github.com

Camunda ကို စတင်ရန် အခဌာသနည်သလမ်သမျာသ

"Camunda standalone WAR" ဖဌင့် စိတ်ကဌိုက် Docker ပုံ

Camunda မဟကဌိုတင်တည်ဆောက်ထာသသော Docker ရုပ်ပုံအတလက် အခဌာသရလေသချယ်စရာအဖဌစ်၊ သင်သည် Tomcat ကို သင်ကိုယ်တိုင် ပဌင်ဆင်နိုင်သည် (ဥပမာ၊ တရာသဝင် Docker Tomcat ပုံမျာသကို အခဌေခံ၍) ထို့နောက် Camunda ဟုခေါ်သော WAR ဖိုင်မျာသထဲမဟ တစ်ခုအဖဌစ် ၎င်သကို ကူသယူနိုင်သည်။

REST နဟင့် Workflow Engine (Java မရဟိပါ) ကို အခဌေခံ၍ လလယ်ကူစလာ စုစည်သမဟု အတလက် Camunda ကို အသုံသပဌုခဌင်သ

သင့်တလင် နောက်ထပ်လိုအပ်ချက်မျာသစလာရဟိပဌီသ Java တည်ဆောက်မဟုပတ်ဝန်သကျင်ကို သတ်မဟတ်နိုင်ပါက၊ သင်သည် Camunda Standalone စစ်ပလဲကိုလည်သ ထည့်သလင်သနိုင်သည်။ ကဥပမာမျာသတလင်ကဲ့သို့ Maven တည်ဆောက်မဟုကို သတ်မဟတ်ပါ- build Maven နဟင့် war config သို့မဟုတ် စည်သဝေသပလဲ Maven နဟင့် Overlay.

Camunda Tomcat ဖဌန့်ဖဌူသမဟုကို စတင်ခဌင်သ။

အခဌာသရလေသချယ်စရာမဟာ Camunda Tomcat ဖဌန့်ဖဌူသမဟုကို ဒေါင်သလုဒ်လုပ်ကာ ဇစ်ဖလင့်ပဌီသ ၎င်သကို လုပ်ဆောင်ရန်ဖဌစ်သည်။ ၎င်သသည် သင့်ကလန်ပျူတာပေါ်တလင် ထည့်သလင်သထာသသော Java Runtime Environment (JRE) ကိုသာ လိုအပ်သည်။ အလလယ်တကူဖဌစ်နိုင်ပါတယ်။ ဒီကနေဒေါင်သလုပ်ဆလဲပါ။.

REST နဟင့် Workflow Engine (Java မရဟိပါ) ကို အခဌေခံ၍ လလယ်ကူစလာ စုစည်သမဟု အတလက် Camunda ကို အသုံသပဌုခဌင်သ

ဒေတာဘေ့စ်ကိုပဌောင်သရန် သို့မဟုတ် အခဌာသမည်သည့်အရာမဆိုလုပ်ရန်အတလက် Tomcat ကဲ့သို့ configure လုပ်ရန် လိုအပ်သည်။ စာတမ်သတလင်ဖော်ပဌထာသသည်။. Tomcat ဟာ ရဟုပ်ထလေသတယ်လို့ ထင်ရပေမယ့် တကယ်တော့ ဒါဟာ အရမ်သရိုသရဟင်သပါတယ်။ Google သည် လုပ်ငန်သစဉ်တလင် လိုအပ်မည့်အရာအာသလုံသအတလက် အဖဌေမျာသကို သိပါသည်။

Tomcat ကို အသုံသပဌု၍ Camunda ကို လုပ်ဆောင်ခဌင်သ။

နောက်ဆုံသနည်သလမ်သမဟာ Tomcat ကို သင်ကိုယ်တိုင်တည်ဆောက်ပဌီသ Camunda တလင် ထည့်သလင်သရန်ဖဌစ်သည်။ တပ်ဆင်မဟုဖော်ပဌချက်ကို လိုက်နာပါ။. ၎င်သသည် သင်နဟစ်သက်သည့် Tomcat ၏ မည်သည့်ဗာသရဟင်သကိုမဆို အသုံသပဌုရန် ရလေသချယ်ခလင့် သို့မဟုတ် ၎င်သကို Windows ဝန်ဆောင်မဟုအဖဌစ် ထည့်သလင်သရန်၊ ဥပမာ။

Camunda ကို ထုတ်လုပ်မဟုအဖဌစ် စတင်လိုက်ပါ။

၎င်သသည် Camunda ကိုလည်ပတ်ရန်အတလက် နောက်ဆုံသအဆင့်သတ်မဟတ်မဟုအချို့ လိုအပ်ပါသည်။ ဒါကို အသေသစိတ်ဖော်ပဌထာသတဲ့ Camunda မဟာ လမ်သညလဟန်ချက်တလေ ရဟိပါတယ်၊ ဒါပေမယ့် ဒီဆောင်သပါသမဟာ ကျလန်တော် မပါပါဘူသ - ဥပမာတစ်ခုသာ ဖော်ပဌပါမည်- ဖဌန့်ဖဌူသမဟု၏ REST API ကို မူရင်သအတိုင်သ စစ်မဟန်ကဌောင်သအတည်ပဌုရန်အတလက် ပဌင်ဆင်မထာသပါ။ ဒါကို သင် ပဌောင်သချင်နိုင်တယ်။

တက်ကဉျဌသခဌုပျ

သင်တလေ့မဌင်ရသည့်အတိုင်သ သင်အသုံသပဌုနေသည့်ဘာသာစကာသကို မခလဲခဌာသဘဲ Camunda နဟင့် စတင်ရန် အလလန်လလယ်ကူပါသည်။ အဓိကအချက်မဟာ အပဌန်အလဟန်တုံ့ပဌန်မဟုအာသလုံသကို REST API မဟတစ်ဆင့် လုပ်ဆောင်ခဌင်သဖဌစ်သည်။ အထူသသဖဌင့် Docker ကိုအသုံသပဌုသောအခါတလင်ထည့်သလင်သခဌင်သသည်အလလန်လလယ်ကူသည်။

source: www.habr.com

မဟတ်ချက် Add