Tere, Habr! Esitlen teile tõlget artiklist autor Bernd Rücker.
07.07.2020, tõlge Bernd Rücker

Kofti arutan sageli mikroteenuste arhitektuuri inimestega, kes on kaugel Javast: C# arendajatega, Node.JS/JavaScriptiga või Golangiga. Kõik nad seisavad silmitsi vajadusega orkestreerimise mehhanismi järele mikroteenuste arhitektuuris või lihtsalt töövoo optimeerimise tööriistale, mis loob võimaluse järjestamiseks, ajastamiseks, Saga ja kompensatsioonitehinguteks.
BPM-platvorm, sobib selliste ülesannete jaoks suurepäraselt. Arendajale sõbralikkus on toote üks peamisi omadusi. Kuid kui vaadata selle dokumentatsiooni, võib jääda mulje, et Camunda «sõbralikkus» on suunatud peamiselt Java arendajatele. Platvorm pakub palju võimalusi oma funktsioonide ja laienduste integreerimiseks, kuid kõik see toimub Java-s. Kas see on tõesti nii?
Ei! Tegelikult saab Camundat hõlpsasti käivitada ilma Java-teadmisteta ja seadistada arhitektuuri, mis sobib valdavalt teie valitud keele koodiga. Selles artiklis käsitleme:
- põhiarhitektuuri;
- REST API;
- nõuandeid olemasolevate klienditeekide kohta, mis ei ole Java;
- näide C# ja Node.JS kasutamisest;
- Camunda serveri käivitamise meetodid (Docker või Tomcat).
Arhitektuur
Camunda on kirjutatud Java-s ja selle käitamiseks on vajalik Java virtuaalmasin (JVM). Camunda pakub REST API-d, mis võimaldab teil kirjutada igas keeles, mis teile meeldib, ja kasutada REST-i Camundaga:

Camunda töövood on määratletud BPMN-is, mis on sisuliselt XML-fail. Selle saab modelleerida .
Camunda käivitamine eelnevalt loodud Docker pildist
Lihtsaim viis Camunda käivitamiseks on kasutada Dockerit. Alternatiivsed Camunda käivitamise meetodid on kirjeldatud selle artikli hilisemates osades.

Sel juhul on piisav lihtsalt käivitada:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Te ei pea muretsema Linuxi, Java virtuaalmasinate või Tomcat'i pärast. Dockerfile'id ja põhidokumendid (nt instruktsioonid andmebaasidega ühendamiseks) on saadaval .
Kui soovite käivitada Camunda Enterprise Editioni, saate seda hõlpsasti muuta .
Kuid Camunda käivitamisel Dockeriga on üks puudus: saate Tomcat'i versiooni, mis ei pruugi alati sisaldada viimaseid parandusi. Selle ületamiseks võite ise luua Docker'i pildi soovitud Tomcat'i distributsiooni põhjal, nagu näidatud allolevas näites, või kasutada mõnda lahendust, mida allpool kirjeldatakse.
Protsessi mudeli juurutamine
Vaatame näidet, kasutades Saga malli traditsioonilise reisi broneerimise jaoks, kus soovite järjestikku käivitada kolme toimingut ja õigesti kompenseerida edukalt lõpule viidud toimingud hilisema tõrke korral. BPMN vormis näeb see välja järgmiselt:

Nüüd saate kasutada . Oletame, et olete selle salvestanud nimega trip.bpmn ja käivitanud Camunda Dockeris, et see oleks saadaval aadressil 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 kaudu ja edastada andmed, mida soovite näha töövoo eksemplari muutujatena:
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 protseduure, näiteks auto broneerimist? Camunda suudab mitte ainult kohe kutsuda teenuseid (Push-Princippi), kasutades mõningaid sisseehitatud , vaid ka asetada tööelemendid oma sisseehitatud järjekorda. Pärast seda saab worker töötlemise elemendid RESTi kaudu kätte, täita töö ja teavitada Camundat lõpetamisest (Pull-Principle).

Seega peate esmalt täitma kuna teised workerid võivad ülesandeid samaaegselt kätte saada süsteemi skaleerimiseks:
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 välise ülesande identifikaatori):
curl
-H "Content-Type: application/json"
-X POST
-d '{"workerId":"worker123", "variables": {}}'
http://localhost:8080/engine-rest/external-task/EXTERNAL_TASK_ID/complete
Nüüd on kõik — te ei ole ikka veel vajanud Java't, eks? Ja sellest piisab, et alustada!
Kliendiraamatukogud
REST API-d on lihtne kutsuda mistahes programmeerimiskeeles. JavaScriptis on seda mugav teha JQuery abil, C#-is tuleb kasutada System.Net.Http ja Newtonsoft.Json. Ent see nõuab aega. Seetõttu võite lihtsalt kasutada mõnda kliendiraamatukogu.
Praeguseks on saadaval mitu valmis kliendiraamatukogu:
- JavaScript: . Toetab Camundat;
- Java: . Toetab Camundat;
- C#: ja . Need projektid on mõlemad vahepealses seisus ja praktiliselt mitteaktiivsed, kuid võivad olla headeks lähtepunktideks;
- PHP: — mitte liiga täielik ja mitte kõikide API muudatustega kaasas olev raamatukogu, kuid ma tean projekte, mis seda kasutavad.
Väljaspool JavaScripti ja Java't ei ole kliendiraamatukogud osa Camunda toote enda küljest. Ärge oodake, et need toetavad kõiki Camunda REST API funktsioone. Kui raamatukogu ei paku teatud funktsiooni, ei tähenda see, et seda seal ei oleks, alati kontrollige Camunda REST API-d. Tüüpilised projektid kasutavad raamatukogusid lähtepunktina ja mallina.
C# näide
Kasutades ülaltoodud kliendiraamatukogu, saame lihtsalt kirjutada:
var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
// Lae BPMN XML fail ressurssidest
camunda.RepositoryService.Deploy("trip-booking", new ListTäielikult töötav lähtekood 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 + " - added something";
callback(null, {
variables: {
someNewData: someNewData
}
});
});
workers.shutdown();
Lisainfo leiate veebilehelt
Alternatiivsed viisid Camunda käivitamiseks
Kohandatud Docker'i pilt 'Camunda standalone WAR'iga
Alternatiivina Camunda valmis Docker'i pildile võite ise seadistada Tomcati (näiteks põhinedes ametlikel Tomcati Docker'i piltidel) ja seejärel kopeerida sinna Camunda ühe nii nimetatud WAR-failina.

Kui teil on palju täiendavaid nõudeid ja te suudate Java koostamiskeskkonda seadistada, saate ka Camunda Standalone WAR-i seadistada. Seadistage Maven'i koostamine järgides neid näiteid: koostamine või koostamine .
Camunda Tomcati jaotuse käivitamine
Veel üks variant on lihtsalt alla laadida Camunda Tomcati jaotust, dekompresseerida see ja käivitada. Selleks on vajalik ainult Java Runtime Environment (JRE), mis on teie arvutisse installitud. Seda saab hõlpsasti .

Andmebaasi muutmiseks või millegi muu tegemiseks peate Tomcati seadistama, nagu . Tean, et Tomcat võib tunduda keeruline, kuid tegelikult on see väga lihtne. Ja Google teab vastuseid kõikidele küsimustele, mis võivad protsessi käigus tekkida.
Camunda käivitamine Tomcati abil
Viimane alternatiiv on ise seadistada Tomcat ja paigaldada sinna Camunda, . See annab võimaluse kasutada igasuguseid Tomcat'i versioone, mida soovite, või paigaldada selle näiteks Windows'i teenusena.
Camunda käivitamine tootmises
Tavaliselt on see nõudnud mõningate lõppseadistuste tegemist Camunda käivitamiseks. Camundal on soovitusi, mis seda väga üksikasjalikult kirjeldavad, kuid ma ei puuduta neid selles artiklis — mainin vaid üht näidet: jaotuse REST API ei ole vaikimisi autentimiseks seadistatud. Võib-olla soovite seda muuta.
Kokkuvõte
Kuidas te võisite tähele panna, on Camundaga alustamine väga lihtne, olenemata kasutatavast keelest. Peamine punkt on see, et kogu suhtlemine toimub REST API kaudu. Paigaldamine on samuti üsna lihtne, eriti Docker'i kasutamisel.
Allikas: habr.com
