Lilo Camunda fun orchestration ti o rọrun ti o da lori REST ati Ẹrọ Ṣiṣẹ (ko si Java)

Kaabo, Habr! Mo ṣafihan itumọ nkan naa si akiyesi rẹ "Lo Camunda gẹgẹbi ohun-ọṣọ-orisun REST ti o rọrun lati lo ati ẹrọ iṣan-iṣẹ (laisi fifọwọkan Java)" nipasẹ Bernd Rücker.

07.07.2020/XNUMX/XNUMX, itumọ awọn nkan Bernd Rucker

Lilo Camunda fun orchestration ti o rọrun ti o da lori REST ati Ẹrọ Ṣiṣẹ (ko si Java)

Mo nigbagbogbo jiroro nipa faaji microservice pẹlu awọn eniyan ti kii ṣe Java: awọn olupilẹṣẹ C#, Node.JS/JavaScript awọn olupilẹṣẹ, tabi Golang aficionados. Gbogbo wọn ni o dojukọ pẹlu otitọ pe wọn nilo ẹrọ orchestration ni faaji microservice, tabi o kan ọpa kan lati ṣe ṣiṣan ṣiṣan iṣẹ ati gba agbara lati paṣẹ, mu awọn akoko ipari, Saga ati awọn iṣowo isanpada.

BPM Syeed pẹlu ìmọ orisun lati Camunda nla fun iru awọn iṣẹ-ṣiṣe. Ọrẹ Olùgbéejáde jẹ ọkan ninu awọn ẹya pataki ti ọja naa. Ṣugbọn ti o ba wo iwe rẹ, o le ni iwunilori pe “ọrẹ” Camunda jẹ ifọkansi ni pataki si awọn olupilẹṣẹ Java. Syeed n pese ọpọlọpọ awọn aṣayan fun sisopọ awọn iṣẹ tirẹ ati awọn amugbooro, ṣugbọn gbogbo rẹ ni Java. Se looto ni?

Rara! Ni otitọ, o le ni rọọrun ṣiṣẹ Camunda laisi eyikeyi imọ Java ati ṣeto faaji fun koodu ni eyikeyi ede ti o fẹ. Ninu nkan yii, a yoo wo:

  • ipilẹ faaji;
  • API REST
  • imọran lori awọn ile-ikawe alabara ti o wa fun awọn ede miiran ju Java;
  • apẹẹrẹ ti lilo C # ati Node.JS;
  • Awọn ọna lati ṣiṣẹ olupin Camunda (Docker tabi Tomcat).

faaji

Camunda ti kọ ni Java ati pe o nilo ẹrọ Java foju kan (JVM) lati ṣiṣẹ. Camunda n pese API REST ti o fun ọ laaye lati kọ ni eyikeyi ede ti o fẹ ati lo REST pẹlu Camunda:

Lilo Camunda fun orchestration ti o rọrun ti o da lori REST ati Ẹrọ Ṣiṣẹ (ko si Java)

Awọn ṣiṣan iṣẹ ni Camunda jẹ asọye ni BPMN, eyiti o jẹ ipilẹ faili XML kan. O le ṣe apẹrẹ pẹlu Camunda Awoṣe.

Ṣiṣẹ Camunda nipasẹ aworan Docker ti a ti kọ tẹlẹ

Ọna to rọọrun lati ṣiṣẹ Camunda ni lati lo Docker. Awọn ọna omiiran lati ṣiṣẹ Camunda ni a ṣe apejuwe nigbamii ni nkan yii.

Lilo Camunda fun orchestration ti o rọrun ti o da lori REST ati Ẹrọ Ṣiṣẹ (ko si Java)

Ni idi eyi, nìkan ṣiṣẹ:

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

O ko ni lati ṣe aniyan nipa Linux, Awọn ẹrọ foju Java tabi Tomcats. Dockerfiles ati awọn iwe ipilẹ (fun apẹẹrẹ, awọn ilana fun sisopọ si awọn apoti isura infomesonu ti a beere) wa ni Github.

Ti o ba fẹ ṣiṣe Ẹda Idawọlẹ Camunda, o le yipada ni rọọrun dockerfile.

Bibẹẹkọ, ṣiṣe Camunda pẹlu Docker ni isale kan: iwọ yoo pari pẹlu ẹya Tomcat ti ko pẹlu awọn atunṣe tuntun nigbagbogbo. Lati ṣiṣẹ ni ayika eyi, o le ṣẹda aworan Docker tirẹ ti o da lori pinpin Tomcat ti o fẹ, bi a ṣe han ninu apẹẹrẹ yii, tabi lo ọkan ninu awọn ojutu ti a ṣalaye ni isalẹ.

Gbigbe Awoṣe ilana

Jẹ ki a wo apẹẹrẹ kan nipa lilo awoṣe Saga fun fowo si irin-ajo Ayebaye nibiti o fẹ lati ma nfa awọn iṣe mẹta ni ọna kan ati ki o sanpada awọn iṣe aṣeyọri ni oore-ọfẹ ni ọran ti ikuna nigbamii. Ti gbekalẹ ni fọọmu BPMN, o dabi eyi:

Lilo Camunda fun orchestration ti o rọrun ti o da lori REST ati Ẹrọ Ṣiṣẹ (ko si Java)

Bayi o le lo API REST fun imuṣiṣẹ awoṣe ilana. Jẹ ki a sọ pe o fipamọ bi irin-ajo.bpmn ati ṣiṣe Camunda nipasẹ Docker nitorina o wa lori 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

Bayi o le ṣiṣe titun bisesenlo instances lilo API REST ki o kọja data ti o fẹ lati rii bi awọn oniyipada apẹẹrẹ iṣẹ-ṣiṣe:

  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

Ibeere ti o nifẹ ti o tẹle ni: bawo ni Camunda ṣe pe awọn ilana bii fowo si ọkọ ayọkẹlẹ kan? Camunda ko le pe awọn iṣẹ lẹsẹkẹsẹ (Push-Principle) ni lilo diẹ ninu ti a ṣe sinu awọn asopọ, ṣugbọn tun fi awọn ohun iṣẹ sinu iru isinyi ti a ṣe sinu. Osise le lẹhinna mu awọn nkan iṣẹ nipasẹ REST, ṣe iṣẹ naa, ki o sọ fun Camunda lati pari (Pull-Principle).

Lilo Camunda fun orchestration ti o rọrun ti o da lori REST ati Ẹrọ Ṣiṣẹ (ko si Java)

Nitorinaa akọkọ o nilo lati ṣiṣẹ bu AtiLock (niwọn igba ti awọn oṣiṣẹ miiran le gba awọn iṣẹ-ṣiṣe ni akoko kanna lati ṣe iwọn eto naa):

  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

Lẹhinna sọ fun Camunda pe osise pari iṣẹ (akiyesi pe o gbọdọ tẹ id iṣẹ-ṣiṣe ita ti o gba ni ibeere akọkọ):

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

Iyẹn ni - iwọ ko tun nilo Java eyikeyi, otun? Ati pe iyẹn ti to lati bẹrẹ!

Awọn ile-ikawe alabara

Pipe API REST rọrun ni eyikeyi ede siseto. Ni JavaScript, eyi ni irọrun ṣe ni lilo JQuery, ati ni C #, ni lilo System.Net.Http ati Newtonsoft.Json. Ṣugbọn eyi yoo gba akoko. Nitorinaa o le kan lo diẹ ninu ile-ikawe alabara kan.

Lọwọlọwọ ọpọlọpọ awọn ile-ikawe alabara ti o ti ṣetan ti o wa:

  • JavaScript: ọna asopọ. Ni atilẹyin nipasẹ Camunda;
  • Java: ọna asopọ. Ni atilẹyin nipasẹ Camunda;
  • C #:ọna asopọ и ọna asopọ. Mejeji ti awọn wọnyi ise agbese ni o wa ni ohun agbedemeji ipinle ati Oba dormant, ṣugbọn o le sin bi kan ti o dara ibẹrẹ;
  • PHP: ọna asopọ - ko ni pipe ati pe ko pẹlu awọn ayipada API tuntun, ṣugbọn Mo mọ awọn iṣẹ akanṣe ti o lo.

Ayafi ti JavaScript ati Java, awọn ile-ikawe alabara kii ṣe apakan ti ọja Camunda funrararẹ. Ma ṣe reti wọn lati ṣe atilẹyin fun gbogbo awọn ẹya API REST ti Camunda. Nitoripe ile-ikawe kan ko pese iṣẹ kan ko tumọ si pe ko si nibẹ, nigbagbogbo ṣayẹwo Camunda's REST API. Awọn iṣẹ itọkasi lo awọn ile-ikawe bi aaye ibẹrẹ ati awoṣe.

C # apẹẹrẹ

Lilo ile-ikawe alabara ti o wa loke, a le kọ nirọrun:

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

Koodu orisun iṣẹ ni kikun le ṣee rii lori ayelujara: ọna asopọ. Miiran apẹẹrẹ wa ni ọna asopọ.

Apeere pẹlu 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();

Alaye diẹ sii ni a le rii lori oju opo wẹẹbu github.com

Awọn ọna Yiyan lati Lọlẹ Camunda

Aworan Docker ti aṣa pẹlu "Camunda standalone WAR"

Gẹgẹbi yiyan si aworan Docker ti a ti kọ tẹlẹ lati Camunda, o le mura Tomcat funrararẹ (fun apẹẹrẹ, da lori awọn aworan Docker Tomcat osise) ati lẹhinna daakọ Camunda sinu rẹ bi ọkan ninu awọn ohun ti a pe ni awọn faili WAR.

Lilo Camunda fun orchestration ti o rọrun ti o da lori REST ati Ẹrọ Ṣiṣẹ (ko si Java)

Ti o ba ni ọpọlọpọ awọn ibeere afikun ati pe o le ṣeto agbegbe kikọ Java kan, o tun le ṣeto ogun Camunda Standalone. Ṣeto Kọ Maven kan bii ninu awọn apẹẹrẹ wọnyi: kọ Maven pẹlu ogun konfigi tabi ijọ Maven pẹlu agbekọja.

Ifilọlẹ pinpin Camunda Tomcat

Aṣayan miiran ni lati ṣe igbasilẹ pinpin Camunda Tomcat nirọrun, ṣii sii, ki o ṣiṣẹ. Eyi nikan nilo Ayika asiko asiko Java (JRE) ti a fi sori kọmputa rẹ. O le ni irọrun download lati ibi.

Lilo Camunda fun orchestration ti o rọrun ti o da lori REST ati Ẹrọ Ṣiṣẹ (ko si Java)

Lati yi data data pada tabi ṣe ohunkohun miiran o nilo lati tunto Tomcat bii se apejuwe ninu iwe. Mo mọ pe Tomcat le dun idiju, ṣugbọn o rọrun pupọ. Ati Google mọ awọn idahun si ohun gbogbo ti o le nilo ninu ilana naa.

Ṣiṣẹ Camunda lilo Tomcat

Yiyan ti o kẹhin ni lati tunto Tomcat funrararẹ ki o fi Camunda sinu rẹ, awọn wọnyi fifi sori apejuwe. Eyi yoo fun ọ ni aṣayan lati lo eyikeyi ti ikede Tomcat ti o fẹ, tabi fi sii bi iṣẹ Windows, fun apẹẹrẹ.

Ifilọlẹ Camunda sinu iṣelọpọ

Eyi yoo nigbagbogbo nilo diẹ ninu iṣeto ikẹhin lati ṣiṣẹ Camunda. Awọn itọnisọna wa ni Camunda ti o ṣapejuwe eyi ni awọn alaye nla, ṣugbọn Emi kii yoo lọ sinu wọn ninu nkan yii - Emi yoo lorukọ apẹẹrẹ kan nikan: API REST pinpin ko ni tunto fun ijẹrisi nipasẹ aiyipada. O le fẹ yi eyi pada.

Summing soke

Bi o ṣe le rii, o rọrun pupọ lati bẹrẹ pẹlu Camunda, laibikita ede ti o nlo. Koko bọtini ni pe gbogbo ibaraenisepo ni a ṣe nipasẹ API REST. Fifi sori jẹ rọrun pupọ paapaa, paapaa nigba lilo Docker.

orisun: www.habr.com

Fi ọrọìwòye kun