Camunda kasutamine REST-põhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on väga mugav.

Tere, Habr! Esitan teile artikli tõlke «Kasutage Camundat kui lihtsat REST-põhist orkestreerimise ja töövoo mootorit (ilma Java-ga tegelemata)» autor Bernd Rücker.

07.07.2020, tõlge artikkel Bernd Rücker

Camunda kasutamine REST-põhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on väga mugav.

Käin sageli aruteludes mikroteenuste arhitektuuri üle inimestega, kes on kaugel Java-st: C#, Node.JS/JavaScript arendajatega või Golangi pooldajatega. Kõik nad seisavad silmitsi vajadusega orkestreerimise mehhanismi järele mikroteenuste arhitektuuris või lihtsalt töövoo optimeerimise ja võimalusega ühtlustada, hallata aega, teha Saga ja kompenseerivaid tehinguid.

Camunda avatud lähtekoodiga BPM-plaatvorm sobib selliste ülesannete jaoks suurepäraselt. Arendajasõbralikkus on toote üks peamisi omadusi. Kuid kui vaadata selle dokumentatsiooni, võib jääda mulje, et Camunda «arendajasõbralikkus» on suunatud peamiselt Java arendajatele. Platvorm pakub palju võimalusi oma funktsioonide ja laienduste ühendamiseks, kuid kõik see toimub Java-s. Kas see tõepoolest on nii? sobib suurepäraselt selliste ülesannete jaoks. Arendaja sõbralikkus on toote üks peamisi jooni. Kuid kui vaadata selle dokumentatsiooni, võib jääda mulje, et Camunda sõbralikkus on peamiselt suunatud Java arendajatele. Platvorm pakub mitmeid võimalusi oma funktsioonide ja lisandite ühendamiseks, kuid kõik see tehakse Java keeles. Kas see on tõesti nii?

Ei! Tegelikult on Camunda lihtne käivitada ilma Java teadmisi omamata ning arhitektuuri seadistada mistahes keeles, mida soovite. Selles artiklis käsitleme:

  • põhiarhitektuuri;
  • REST API-d;
  • näpunäiteid olemasolevate klienditeekondade kohta, mis erinevad Java-st;
  • C# ja Node.JS kasutamise näidet;
  • Camunda serveri käivitamise viise (Docker või Tomcat).

Arhitektuur

Camunda on kirjutatud Java-s ja vajab käivitamiseks Java virtuaalmasinat (JVM). Camunda pakub REST API-d, mis võimaldab teil kirjutada mistahes keeles, mis teile meeldib, ja kasutada Camundat REST-iga:

Camunda kasutamine REST-põhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on väga mugav.

Camundas määratakse töövood BPMN-is, mis põhineb põhimõtteliselt XML-failil. Seda saab modelleerida abiga Camunda Modeler.

Camunda käitamine eelnevalt loodud Docker'i pildiga

Lihtsaim viis Camunda käitamiseks on kasutada Dockerit. Camunda käitamise alternatiivsed viisid on allpool selles artiklis kirjeldatud.

Camunda kasutamine REST-põhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on väga mugav.

Sel juhul on lihtsalt vajalik käivitada:

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

Te ei pea muretsema Linuxi, Java virtuaalmasinate või Tomcatide pärast. Dockerfile'id ja põhiteave (näiteks juhendid vajalike andmebaasidega ühendamiseks) on saadaval Github.

Kui soovite Camunda Enterprise Editionit käivitada, saate seda hõlpsasti muuta Dockerfile.

Kuid Camunda käitamine Dockeris toob kaasa ühe puuduse: saate Tomcat'i versiooni, mis ei pruugi alati sisaldada viimaseid parandusi. Selle ümberkäimiseks võite luua oma Docker-pildi sobiva Tomcat'i jaotuse põhjal, nagu on näidatud järgmises näites, või kasutada üht allpool kirjeldatud lahendust.

Protsessimudeli juurutamine

Vaatame näidet, kasutades Saga šablooni klassikalise reisibroneeringu jaoks, kus soovite kolm tegevust järjest kutsuda ja korrektselt kompenseerida edukalt sooritatud tegevusi hilisema tõrke korral. BPMN kujul näeb see välja järgmine:

Camunda kasutamine REST-põhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on väga mugav.

Nüüd saate kasutada REST API protsessimudeli juurutamiseks. Oletame, et olete selle salvestanud nimega trip.bpmn ja käivitanud Camunda Dockeris, et see oleks saadaval localhost:8080:

  curl -w "n" 
-H "Accept: application/json" 
-F "deployment-name=trip" 
-F "enable-duplicate-filtering=true" 
-F "deploy-changed-only=true" 
-F "trip.bpmn=@trip.bpmn" 
http://localhost:8080/engine-rest/deployment/create

Nüüd saate käivitada uus töövoo eksemplar REST API abil ja edastades andmeid, mida soovite töövoo instantsi muutujatena näha:

  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

Järgmine huvitav küsimus: kuidas Camunda kutsub välja protseduure, nagu auto broneerimine? Camunda suudab mitte ainult kohe väljakutsuda teenuseid (Push-Principle), kasutades mõningaid sisseehitatud konnekoreid, vaid ka paigutada tööelemente omamoodi sisseehitatud järjekorda. Pärast seda võib töötaja saada tööelemente REST kaudu, tööd teha ja teavitada Camundat lõpetamisest (Pull-Principle).

Camunda kasutamine REST-põhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on väga mugav.

Esiteks peate teostama fetchAndLock sest teised töötajad võivad ülesandeid samaaegselt saada, et süsteemi skaleerida:

  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

Seejärel teavitage Camundat, et töötaja on lõpetanud töö (pange tähele, et peate sisestama esimese päringu käigus saadud external task'i identifikaatori):

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

Ja kõik on valmis — teil ei ole veel vaja mingit Java, eks? Ja see on piisav, et alustamiseks!

Kliendiraamatukogud

REST API kutsumine on lihtne igas programmeerimiskeeles. JavaScriptis on selleks mugav kasutada JQuery’t, ja C#-s tuleb kasutada System.Net.Http ja Newtonsoft.Json. Kuid selleks kulub aega. Seetõttu võite lihtsalt kasutada mõnda kliendiraamatukogu.

Praegu on saadaval mitu valmis kliendiraamatukogu:

  • JavaScript: link. Camunda on toetatud;
  • Java: link. Camunda on toetatud;
  • C#:link ja link. Need projektid on mõlemad vahepealses seisundis ja peaaegu kasutamata, kuid võivad olla head alguspunktid;
  • PHP: link — see on mitte liiga täielik ja ei sisalda viimaseid API muudatusi, kuid ma tean projekte, mis seda kasutavad.

Välja arvatud JavaScript ja Java, ei kuulu klienditeegid Camunda toote hulka. Ära oota, et need toetavad kõiki Camunda REST API võimalusi. Kui teek ei paku teatud funktsiooni, ei tähenda see, et seda seal ei ole, alati kontrolli Camunda REST API-d. Tüüpilised projektid kasutavad teeke lähtepunktina ja šabloonina.

C# näide

Kasutades eespool mainitud klienditeeki, saame lihtsalt kirjutada:

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  // Laadi BPMN XML fail ressurssidelt
  camunda.RepositoryService.Deploy("trip-booking", new List {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Registreeri töötajad
  registerWorker("reserve-car", externalTask => {
    // siin saad tõeliselt tegutseda! Näiteks sysout :-)
    Console.WriteLine("Autosid broneeritakse nüüd...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Autosid tühistatakse nüüd...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Hotelli broneeritakse nüüd...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Registreeri rohkem töötajaid...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary()
    {
      {"someBookingData", "..." }
    });

Terve töölehtede kood on Internetis saadaval: link. Teine näide on saadaval aadressil 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 + " - lisatud midagi";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

Rohkem teavet on saadaval veebilehelt github.com

Alternatiivsed viisid Camunda käivitamiseks

Kohandatud Docker pilt 'Camunda standalone WAR' jaoks

Alternatiividena valmis Docker pildile Camunda, saate ise valmistada Tomcat (näiteks põhinedes ametlikele Docker Tomcat piltidele) ja seejärel kopeerida Camunda sinna ühe nii nimetatud WAR-failina.

Camunda kasutamine REST-põhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on väga mugav.

Kui teil on palju lisanõudeid ja suudate seadistada Java ehituskeskkonda, saate ka seadistada Camunda Standalone war. Seadistage Maven ehitus nagu nende näidiste puhul: ehitus Maven WAR konfiguratsiooniga või ehitus Maven Overlay'iga.

Camunda Tomcat'i jaotuse käivitamine

Veel üks võimalus on lihtsalt alla laadida Camunda Tomcat'i jaotus, dekompressida see ja käivitada. Selleks on vajalik ainult Java Runtime Environment (JRE), mis on teie arvutisse installitud. Selle saab kergesti alla laadida siit.

Camunda kasutamine REST-põhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on väga mugav.

Andmebaasi muutmiseks või muude muudatuste tegemiseks peate seadistama Tomcati, nagu on dokumentatsioonis kirjeldatud. Ma tean, et Tomcat võib tunduda keeruline, kuid tegelikult on see väga lihtne. Ja Google teab vastuseid kõigile, mis võib protsessis vajalikuks osutuda.

Camunda käivitamine Tomcat'i abil

Viimane alternatiiv on seadistada Tomcat ja installida Camunda ise, järgides paigaldusjuhiseid. See võimaldab kasutada igat Tomcati versiooni, mida eelistate, või näiteks installida selle Windowsi teenusena.

Camunda käivitamine tootmises

Tavaliselt on vajalik teha mõningaid lõppviimistlusi Camunda käivitamiseks. Camundal on soovitusi, mis seda väga üksikasjalikult kirjeldavad, kuid ma ei puutu sellesse artiklis — mainin vaid ühte näidet: vaike REST API ei ole seadistatud autentimisteenuse jaoks. Võib-olla soovite seda muuta.

Kokkuvõte

Kuidas te võisite märgata, on Camundaga alustamine väga lihtne, sõltumata kasutatavast keelest. Peamine punkt on see, et kogu suhtlus toimub REST API kaudu. Paigaldamine on samuti üsna lihtne, eriti Dockerit kasutades.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster