Camunda erabiliz, REST-en oinarritutako orkestrazio errazetarako eta Workflow Engine (Javarik gabe)

Kaixo, Habr! Artikuluaren itzulpena aurkezten dizuet "Erabili Camunda REST-en oinarritutako orkestrazio eta lan-fluxuen motor gisa erabiltzeko erraza (Java ukitu gabe)" Egilea: Bernd RΓΌcker.

07.07.2020/XNUMX/XNUMX, itzulpena Artikulua Bernd RΓΌcker

Camunda erabiliz, REST-en oinarritutako orkestrazio errazetarako eta Workflow Engine (Javarik gabe)

Askotan eztabaidatzen dut mikrozerbitzuen arkitektura Java ez diren pertsonekin: C#, Node.JS/JavaScript garatzaileei edo Golang-en zaleak. Horiek guztiek mikrozerbitzuen arkitekturan orkestrazio motor bat behar dutela edo lan-fluxua optimizatzeko eta ordenatzeko, denbora-muga kudeatzeko, Saga eta transakzio konpentsatzeko gaitasuna lortzeko tresna bat besterik ez dute.

BPM plataformarekin Camundaren kode irekia bikaina horrelako zereginetarako. Garatzaileen laguntasuna produktuaren ezaugarri nagusietako bat da. Baina bere dokumentazioari erreparatuz gero, Camundaren adiskidetasuna batez ere Java garatzaileei zuzenduta dagoela irudituko zaizu. Plataformak aukera asko eskaintzen ditu zure funtzioak eta luzapenak konektatzeko, baina dena Javan egiten da. Benetan al da?

Ez! Izan ere, Camunda erraz exekutatu dezakezu Java ezagutzarik gabe eta arkitektura konfiguratu dezakezu nahi duzun hizkuntzan kodetzeko. Artikulu honetan aztertuko dugu:

  • oinarrizko arkitektura;
  • REST APIa;
  • Java ez diren hizkuntzetarako dauden bezero liburutegiei buruzko aholkuak;
  • C# eta Node.JS erabiltzeko adibidea;
  • Camunda zerbitzaria exekutatzeko moduak (Docker edo Tomcat).

arkitektura

Camunda Javan idatzita dago eta Java Makina Birtuala (JVM) behar du exekutatzeko. Camundak REST API bat eskaintzen du, nahi duzun hizkuntzan idazteko eta Camundarekin REST erabiltzeko:

Camunda erabiliz, REST-en oinarritutako orkestrazio errazetarako eta Workflow Engine (Javarik gabe)

Camundako lan-fluxuak BPMNn definitzen dira, hau da, funtsean, XML fitxategi bat. Erabiliz modelatu daiteke Camunda Modeler.

Camunda exekutatzen aurrez eraikitako Docker irudi baten bidez

Camunda exekutatzeko modurik errazena Docker erabiltzea da. Artikulu honetan Camunda exekutatzeko modu alternatiboak deskribatzen dira geroago.

Camunda erabiliz, REST-en oinarritutako orkestrazio errazetarako eta Workflow Engine (Javarik gabe)

Kasu honetan, exekutatu:

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

Ez duzu kezkatu behar Linux, Java makina birtualak edo Tomcats. Dockerfiles eta oinarrizko dokumentazioa (adibidez, beharrezko datu-baseetara konektatzeko argibideak) helbidean daude eskuragarri Github.

Camunda Enterprise Edition exekutatu nahi baduzu, erraz alda dezakezu Dockerfile.

Hala ere, bada alde txar bat Camunda Docker erabiliz exekutatzeko: beti azken konponketak biltzen ez dituen Tomcat-en bertsio batekin amaituko duzu. Hori nolabait konpontzeko, zuk zeuk sortu dezakezu Docker irudi bat nahi duzun Tomcat banaketan oinarrituta, adibide honetan erakusten den moduan, edo behean deskribatutako irtenbideetako bat erabil dezakezu.

Prozesu-eredu bat zabaltzea

Ikus dezagun adibide bat bidaia-erreserba klasiko baterako Saga txantiloia erabiliz, non hiru ekintza jarraian abiarazi nahi dituzun eta ondo konpentsatu ekintza arrakastatsuak geroko hutsegite bat gertatuz gero. BPMN formatuan aurkeztuta, itxura hau du:

Camunda erabiliz, REST-en oinarritutako orkestrazio errazetarako eta Workflow Engine (Javarik gabe)

Orain erabil dezakezu REST APIa prozesu eredua zabaltzeko. Demagun trip.bpmn gisa gorde duzula eta Docker bidez Camunda exekutatu duzula, beraz, localhost-en: 8080 erabilgarri zegoen:

  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

Orain korrika egin dezakezu lan-fluxuaren instantzia berriak REST APIa erabiliz eta ikusi nahi dituzun datuak lan-fluxuaren instantzia-aldagai gisa pasatuz:

  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

Hurrengo galdera interesgarria da Camundak nola abiarazten ditu auto bat erreserbatzea bezalako prozedurak? Camundak ezin ditu berehala zerbitzuetara deitu (Push-Principle), integratutako batzuk erabiliz konektoreak, baina lan-elementuak ere sartu ilara moduko batean sartu. Langileak, ondoren, lan-elementuak jaso ditzake REST bidez, lana egin eta Camundari (Pull-Principle) amaitutakoaren berri eman.

Camunda erabiliz, REST-en oinarritutako orkestrazio errazetarako eta Workflow Engine (Javarik gabe)

Beraz, lehenengo egin behar duzu fetchAndLock (beste langileek sistema eskalatzeko zereginak jaso ditzakete aldi berean):

  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

Orduan esan hori Camundari langileak bere lana amaitu du (kontuan izan lehenengo eskaeran jasotako kanpoko zereginaren IDa sartu behar duzula):

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

Hori da - orain arte ez duzu Javarik behar, ezta? Eta nahikoa da hasteko!

Bezero liburutegiak

REST APIra deitzea erraza da edozein programazio hizkuntzatan. JavaScript-en komenigarria da hau egitea JQuery erabiliz, eta C#-n System.Net.Http eta Newtonsoft.Json erabil ditzakezu. Baina honek denbora beharko du. Beraz, bezero liburutegi batzuk erabil ditzakezu.

Gaur egun prest dauden bezero liburutegiak eskuragarri daude:

  • javascript: link. Camundak lagunduta;
  • Java: link. Camundak lagunduta;
  • C #:link ΠΈ link. Bi proiektu hauek tarteko egoeran daude eta ia ez dute jarduerarik, baina abiapuntu on gisa balio dezakete;
  • PHP: link ez da oso liburutegi osoa eta ez ditu azken API aldaketak sartzen, baina badakit erabiltzen duten proiektuak.

JavaScript eta Java izan ezik, bezeroen liburutegiak ez dira Camunda produktuaren beraren parte. Ez espero Camunda-ren REST APIaren funtzio guztiak onartzen dituztenik. Liburutegi batek funtzio jakin bat eskaintzen ez duelako ez du esan nahi hor ez dagoenik, begiratu beti Camunda REST APIa. Proiektu tipikoek liburutegiak erabiltzen dituzte abiapuntu eta txantiloi gisa.

Adibidea C#-rekin

Goiko bezero liburutegia erabiliz, besterik gabe idatzi dezakegu:

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

Lan-iturburu-kode osoa sarean aurki daiteke: link. Beste adibide bat helbidean dago eskuragarri link.

Adibidea Node.js-ekin

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

Informazio gehiago webgunean aurki daiteke github.com

Camunda hasteko modu alternatiboak

Docker-en irudi pertsonalizatua "Camunda standalone WAR"-rekin

Camunda-ren aurrez eraikitako Docker irudiaren alternatiba gisa, Tomcat zuk zeuk prestatu dezakezu (adibidez, Docker Tomcat-eko irudi ofizialetan oinarrituta) eta ondoren Camunda bertan kopiatu WAR deritzon fitxategietako bat bezala.

Camunda erabiliz, REST-en oinarritutako orkestrazio errazetarako eta Workflow Engine (Javarik gabe)

Baldintza gehigarri asko badituzu eta Java eraikitze-ingurune bat pertsonaliza dezakezu, Camunda Standalone War ere konfigura dezakezu. Konfiguratu Maven eraikuntza bat adibide hauetan bezala: eraiki Maven gerra konfigurazioarekin edo muntaia Maven gainjartzearekin.

Camunda Tomcat banaketa martxan jartzea

Beste aukera bat Camunda Tomcat banaketa deskargatu, deskonprimitu eta exekutatu besterik ez da. Horretarako, zure ordenagailuan Java Runtime Environment (JRE) instalatuta besterik ez duzu behar. Erraz izan daiteke deskargatu hemendik.

Camunda erabiliz, REST-en oinarritutako orkestrazio errazetarako eta Workflow Engine (Javarik gabe)

Datu-basea aldatzeko edo beste edozer egiteko Tomcat bezalakoa konfiguratu behar duzu dokumentazioan deskribatuta. Badakit Tomcat konplikatua dirudiela, baina benetan oso erraza da. Eta Google-k prozesuan behar duzun guztiari erantzunak ditu.

Camunda exekutatzen Tomcat erabiliz

Azken alternatiba Tomcat zuk zeuk konfiguratzea eta Camunda bertan instalatzea da, instalazioaren deskribapenari jarraituz. Horrek nahiago duzun Tomcat-en edozein bertsio erabiltzeko aukera emango dizu, edo, adibidez, Windows zerbitzu gisa instalatzeko.

Camunda ekoizpenera abiaraztea

Normalean, honek azken konfigurazio bat egin beharko du Camunda martxan jartzeko. Camunda-k xehetasun handiz deskribatzen duten jarraibideak ditu, baina ez ditut artikulu honetan ukituko - Adibide bakarra jarriko dut: banaketaren REST APIa ez dago lehenespenez autentifikaziorako konfiguratuta. Baliteke hau aldatu nahi izatea.

Summing-up

Konturatuko zinen bezala, Camundarekin hastea oso erraza da, erabiltzen duzun hizkuntza edozein dela ere. Gakoa da komunikazio guztia REST APIaren bidez egiten dela. Instalazioa ere nahiko erraza da, batez ere Docker erabiltzen denean.

Iturria: www.habr.com

Gehitu iruzkin berria