Tere, Habr! Esitan teile artikli tõlke autor Bernd Rücker.
07.07.2020, tõlge Bernd Rücker

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 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:

Camundas määratakse töövood BPMN-is, mis põhineb põhimõtteliselt XML-failil. Seda saab modelleerida abiga .
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.

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 .
Kui soovite Camunda Enterprise Editionit käivitada, saate seda hõlpsasti muuta .
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:

Nüüd saate kasutada . 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 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 , 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).

Esiteks peate teostama 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 (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: . Camunda on toetatud;
- Java: . Camunda on toetatud;
- C#: ja . Need projektid on mõlemad vahepealses seisundis ja peaaegu kasutamata, kuid võivad olla head alguspunktid;
- PHP: — 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 ListTerve töölehtede kood on Internetis saadaval: . Teine näide on saadaval aadressil .
Пример с 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
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.

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 või ehitus .
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 .

Andmebaasi muutmiseks või muude muudatuste tegemiseks peate seadistama Tomcati, nagu . 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, . 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
