Ukusebenzisa i-Camunda ku-ORST-based orchestration elula kunye ne-Workflow Engine (akukho Java)

Hayi Habr! Ndinikezela ingqalelo yakho inguqulelo yenqaku "Sebenzisa iCamunda njengendlela ekulula ukuyisebenzisa esekwe kwi-REST kunye ne-injini yokuhamba komsebenzi (ngaphandle kokuchukumisa iJava)" nguBernd Rücker.

07.07.2020/XNUMX/XNUMX, inguqulelo amanqaku UBernd Rucker

Ukusebenzisa i-Camunda ku-ORST-based orchestration elula kunye ne-Workflow Engine (akukho Java)

Ndihlala ndixoxa ngokwakhiwa kwe-microservice nabantu abangengo-Java: abaphuhlisi be-C #, abaphuhlisi be-Node.JS/JavaScript, okanye i-Golang aficionados. Bonke bajongene nenyaniso yokuba badinga indlela yokudibanisa kwi-microservice architecture, okanye isixhobo nje sokulungelelanisa ukuhamba komsebenzi kunye nokufumana ukukwazi uku-odola, ukuphatha ixesha lokuphuma, iSaga kunye nembuyekezo yentengiselwano.

iqonga BPM nge umthombo ovulekileyo ovela eCamunda mkhulu kwimisebenzi enjalo. Ubungane bomphuhlisi yenye yezinto eziphambili zemveliso. Kodwa ukuba ujonga amaxwebhu ayo, unokufumana ingcamango yokuba "ubuhlobo" bukaCamunda bujolise ikakhulu kubaphuhlisi beJava. Iqonga libonelela ngeendlela ezininzi zokudibanisa imisebenzi yakho kunye nezandiso, kodwa zonke zenziwe kwiJava. Ngaba ngokwenene?

Hayi! Ngapha koko, unokuqhuba ngokulula iCamunda ngaphandle kolwazi lweJava kwaye usete uyilo lwekhowudi kulo naluphi na ulwimi olukhethileyo. Kweli nqaku siza kujonga:

  • uyilo olusisiseko;
  • REST API
  • iingcebiso kwiilayibrari ezikhoyo zabaxumi kwiilwimi ngaphandle kweJava;
  • umzekelo usebenzisa i-C # kunye neNode.JS;
  • iindlela zokusebenzisa iseva yeCamunda (iDocker okanye iTomcat).

izakhiwo

ICamunda ibhalwe kwiJava kwaye ifuna iJava Virtual Machine (JVM) ukuze iqhube. ICamunda ibonelela nge-REST API ekuvumela ukuba ubhale ngalo naluphi na ulwimi oluthandayo kwaye usebenzise i-REST ngeCamunda:

Ukusebenzisa i-Camunda ku-ORST-based orchestration elula kunye ne-Workflow Engine (akukho Java)

Ukuhamba komsebenzi kwi-Camunda kuchazwe kwi-BPMN, eyona fayile ye-XML. Ingenziwa imodeli nge Camunda Modeler.

Ukubaleka iCamunda ngomfanekiso weDocker owakhiwe kwangaphambili

Eyona ndlela ilula yokuqhuba iCamunda kukusebenzisa iDocker. Iindlela ezizezinye zokuqhuba iCamunda zichazwe kamva kweli nqaku.

Ukusebenzisa i-Camunda ku-ORST-based orchestration elula kunye ne-Workflow Engine (akukho Java)

Kule meko, qhuba nje:

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

Awunaxhala malunga neLinux, oomatshini beJava Virtual okanye iiTomcats. I-Dockerfiles kunye namaxwebhu asisiseko (umzekelo, imiyalelo yokudibanisa kwiinkcukacha ezifunekayo) ziyafumaneka Github.

Ukuba ufuna ukuqhuba iCamunda Enterprise Edition ungatshintsha ngokulula dockerfile.

Nangona kunjalo, ukuqhuba iCamunda ngeDocker kunelinye icala elisezantsi: uya kugqiba ngenguqulelo yeTomcat engasoloko ibandakanya izilungiso zamva nje. Ukusebenzela oku, unokwenza owakho umfanekiso weDocker ngokusekelwe kunikezelo olufunwayo lweTomcat, njengoko kubonisiwe kulo mzekelo, okanye usebenzise esinye sezisombululo ezichazwe ngezantsi.

Inkqubo yokusasazwa koMfuziselo

Makhe sijonge kumzekelo usebenzisa itemplate yeSaga yokubhukisha uhambo lwakudala apho ufuna ukuqalisa iintshukumo ezintathu ngokulandelelana kwaye ubuyekeze ngobubele izenzo ezigqitywe ngempumelelo kwimeko yokusilela kamva. Imelwe kwifom ye-BPMN, ibonakala ngolu hlobo:

Ukusebenzisa i-Camunda ku-ORST-based orchestration elula kunye ne-Workflow Engine (akukho Java)

Ngoku ungasebenzisa I-REST API yokuhanjiswa kwemodeli yenkqubo. Masithi uyigcine njenge-trip.bpmn kwaye uqhube i-Camunda nge-Docker ukuze ifumaneke kwi-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

Ngoku ungabaleka iinkqubo ezintsha zokusebenza usebenzisa i-REST API kwaye ugqithise idatha ofuna ukuyibona njengokuguquguquka komzekelo wokuhamba komsebenzi:

  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

Umbuzo olandelayo onika umdla ngulo: ingaba uCamunda uzibiza njani iinkqubo ezifana nokubhukisha imoto? I-Camunda ayikwazi ukubiza kuphela iinkonzo ngokukhawuleza (Push-Principle) usebenzisa enye eyakhelwe-ngaphakathi izihlanganisi, kodwa kwakhona ubeke izinto zokusebenza kuhlobo olwakhelwe ngaphakathi. Umsebenzi angalanda izinto zomsebenzi nge-REST, enze umsebenzi, aze axelele uCamunda ukuba agqibe (Tsala-Umgaqo).

Ukusebenzisa i-Camunda ku-ORST-based orchestration elula kunye ne-Workflow Engine (akukho Java)

Ngoko ke, kufuneka wenze kuqala landaAndLock (kuba abanye abasebenzi banokufumana imisebenzi ngaxeshanye ukukala inkqubo):

  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

Xela ke uCamunda lonto umsebenzi uwugqibile (qaphela ukuba kufuneka ufake i-id yomsebenzi wangaphandle ofunyenwe kwisicelo sokuqala):

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

Yiloo nto-awuzange ufune iJava ukuza kuthi ga ngoku, akunjalo? Kwaye kwanele ukuba uqalise!

Amathala eencwadi abaxhasi

Ukubiza i-REST API kulula kulo naluphi na ulwimi lwenkqubo. KwiJavaScript, oku kwenziwa ngokulula ngokusebenzisa i-JQuery, nakwi-C #, usebenzisa i-System.Net.Http kunye ne-Newtonsoft.Json. Kodwa oku kuya kuthatha ixesha. Ke ungasebenzisa ithala leencwadi labathengi.

Ngoku kukho amathala eencwadi asele enziwe abathengi akhoyo:

  • IJavaScript: unxibelelwano. Ixhaswa nguCamunda;
  • IJava: unxibelelwano. Ixhaswa nguCamunda;
  • C #:unxibelelwano и unxibelelwano. Zombini ezi projekthi zikwimeko ephakathi kwaye zithe cwaka, kodwa zinokusebenza njengesiqalo esihle;
  • PHP: unxibelelwano - ayiphelelanga kakhulu kwaye ayibandakanyi utshintsho lwamva nje lwe-API, kodwa ndiyazi iiprojekthi eziyisebenzisayo.

Ngaphandle kweJavaScript kunye neJava, iilayibrari zabaxumi aziyonxalenye yemveliso yeCamunda ngokwayo. Ungalindeli ukuba baxhase zonke iimpawu ze-Camunda's REST API. Kungenxa yokuba ithala leencwadi lingaboneleli ngomsebenzi othile akuthethi ukuba akukho, hlala ujonga i-Camunda's REST API. Iiprojekthi eziqhelekileyo zisebenzisa amathala eencwadi njengendawo yokuqala kunye netemplate.

C # umzekelo

Ukusebenzisa ithala leencwadi lomxhasi lingasentla, sinokubhala ngokulula:

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

Ikhowudi epheleleyo yomthombo osebenzayo inokufumaneka kwi-intanethi: unxibelelwano. Omnye umzekelo uyafumaneka ku unxibelelwano.

Umzekelo ngeNode.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();

Ulwazi oluninzi lunokufumaneka kwiwebhusayithi github.com

Iindlela ezizezinye zokuqalisa iCamunda

Umfanekiso weDocker yesiko kunye ne "Camunda standalone WAR"

Njengenye indlela yomfanekiso weDocker owakhiwe ngaphambili ovela eCamunda, ungazilungiselela iTomcat ngokwakho (umzekelo, ngokusekwe kwimifanekiso esemthethweni yeDocker Tomcat) kwaye emva koko ukope uCamunda kuyo njengenye yeefayile ezibizwa ngokuba yi-WAR.

Ukusebenzisa i-Camunda ku-ORST-based orchestration elula kunye ne-Workflow Engine (akukho Java)

Ukuba uneemfuno ezininzi ezongezelelweyo kwaye unokuseta indawo yokwakha yeJava, unokuseta kwakhona imfazwe yeCamunda Standalone. Cwangcisa iMaven ukwakha njengoko kule mizekelo: yakha Maven kunye nemfazwe config okanye indibano IMaven ene-Overlay.

Iphehlelela usasazo lweCamunda Tomcat

Enye inketho kukukhuphela ngokulula ukuhanjiswa kweCamunda Tomcat, uyivule, kwaye uyiqhube. Oku kufuna kuphela iJava Runtime Environment (JRE) efakwe kwikhompyuter yakho. Inokuba lula download ukusuka apha.

Ukusebenzisa i-Camunda ku-ORST-based orchestration elula kunye ne-Workflow Engine (akukho Java)

Ukutshintsha isiseko sedatha okanye wenze nantoni na enye oyifunayo ukuqwalasela iTomcat njenge ichazwe kumaxwebhu. Ndiyazi ukuba iTomcat inokubonakala inzima, kodwa eneneni ilula kakhulu. Kwaye uGoogle uneempendulo kuyo yonke into onokuyidinga kwinkqubo.

Ukubaleka iCamunda usebenzisa iTomcat

Enye indlela yokugqibela kukuseta iTomcat ngokwakho kwaye ufake iCamunda kuyo, kulandela inkcazo yokuhlohla. Oku kuya kukunika ukhetho lokusebenzisa naluphi na uhlobo lweTomcat olukhethayo, okanye uyifake njengenkonzo yeWindows, umzekelo.

Ukwazisa iCamunda kwimveliso

Oku kuya kufuna ukusetwa kokugqibela ukuze kuqhutywe iCamunda. Kukho izikhokelo kwiCamunda ezichaza oku ngokweenkcukacha ezinkulu, kodwa andiyi kungena kuzo kweli nqaku - ndiza kukhankanya umzekelo omnye kuphela: i-REST API yonikezelo ayilungiselelwanga ukuqinisekiswa ngokungagqibekanga. Ungafuna ukutshintsha oku.

Ukuqulunqa

Njengoko ubona, kulula kakhulu ukuqalisa ngeCamunda, nokuba usebenzisa luphi na ulwimi. Inqaku eliphambili kukuba konke ukusebenzisana kwenziwa nge-REST API. Ukufakela kukwalula kakhulu, ngakumbi xa usebenzisa iDocker.

umthombo: www.habr.com

Yongeza izimvo