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).
Architecture
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
