Helló, Habr! Örömmel mutatom be az írás fordítását. szerző Bernd Rücker.
2020.07.07., fordítás Bernd Rücker

Gyakran beszélek mikroszolgáltatás-architektúráról olyan emberekkel, akik távol állnak a Javától: C#, Node.JS/JavaScript fejlesztőkkel vagy Golang hívekkel. Mindannyian szembesülnek azzal, hogy szükségük van egy orchestrációs mechanizmusra a mikroszolgáltatás-architektúrában, vagy csupán egy eszközre a munkafolyamat optimalizálására, az ütemezés, az időtúllépések, a Saga és a kompenzáló tranzakciók kezelésére.
A BPM platform, kitűnően alkalmazható ezekre a feladatokra. A fejlesztőkkel való barátságosság a termék egyik kulcsfontosságú jellemzője. De ha ránézünk a dokumentációjára, az az érzésünk lehet, hogy a Camunda „barátságossága“ főként a Java fejlesztők felé irányul. A platform számos lehetőséget kínál a saját funkciók és kiterjesztések integrálására, de mindez Java nyelven történik. Valóban így van?
Nem! Valójában a Camunda könnyen elindítható bármilyen Java-nyelv ismerete nélkül, és bármilyen választott nyelven is beállíthatja az architektúrát. Ebben a cikkben megvizsgáljuk:
- az alap architektúrát;
- a REST API-t;
- tanácsokat az olyan létező kliens könyvtárakhoz, amelyek Java-tól eltérő nyelveken íródnak;
- példát a C# és Node.JS használatára;
- a Camunda szerver elindításának módjait (Docker vagy Tomcat).
Architektúra
A Camunda Java nyelven íródott, és működéséhez Java virtuális gépre (JVM) van szüksége. A Camunda REST API-t kínál, amely lehetővé teszi, hogy bármilyen nyelven írjon, ami tetszik, és használja a REST-t a Camundával:

A Camundában a munkafolyamatokat BPMN-ben határozzák meg, amely főként egy XML-fájl. Ezt modellezheti a .
A Camunda indítása egy előre elkészített Docker képen keresztül
A legkönnyebb módja a Camunda elindításának a Docker használata. A Camunda egyéb indítási módjai a cikk további részében találhatók.

Ebben az esetben elegendő egyszerűen futtatni:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Nincs szükség arra, hogy aggódjon Linux, Java virtuális gépek vagy Tomcatok miatt. A Dockerfile-ok és az alapdokumentáció (például az utasítás a kívánt adatbázisokhoz való csatlakozáshoz) elérhetők a .
Ha el szeretné indítani a Camunda Enterprise Edition-t, könnyen módosíthatja .
A Docker használatával történő Camunda indításának van egy hátránya: egy Tomcat verziót kap, amely nem mindig tartalmazza a legújabb javításokat. Ennek megkerülésére létrehozhatja a Docker képet a kívánt Tomcat disztribúció alapján, ahogyan az az alábbi példában látható, vagy választhat az alább leírt megoldások közül.
A folyamatmodell telepítése
Nézzünk meg egy példát a Saga sablon használatával, amely egy klasszikus utazási foglalás során használatos, ahol három tevékenységet szeretne egymás után végrehajtani, és helyesen kompenzálni a sikeresen végrehajtott tevékenységeket egy későbbi hiba esetén. BPMN formában így néz ki:

Most használhatja a . Tegyük fel, hogy trip.bpmn néven mentette el, és elindította a Camundát Docker-en keresztül, így elérhető lesz a localhost: 8080 címen:
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
Most új munkafolyamat példányokat indíthat 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
A következő érdekes kérdés: hogyan hívja meg a Camunda az olyan eljárásokat, mint az autóbérlés? A Camunda nemcsak azonnal hívhat szolgáltatásokat (Push-Principle), hanem használhat néhány beépített
konektort Tehát először végre kell hajtania

fetchAndLock 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
Ezután tájékoztatnia kell a Camundát, hogy
a worker befejezte a munkát curl -H "Content-Type: application/json" -X POST -d '{"workerId":"worker123", "variables": {}}' http://localhost:8080/engine-rest/external-task/EXTERNAL_TASK_ID/complete
curl
-H "Content-Type: application/json"
-X POST
-d '{"workerId":"worker123", "variables": {}}'
http://localhost:8080/engine-rest/external-task/EXTERNAL_TASK_ID/complete
Ez van — eddig még nem volt szükséged Java-ra, ugye? És ez elegendő a munkához való kezdéshez!
Kliens könyvtárak
A REST API hívása könnyű bármely programozási nyelven. JavaScript-ben ezt kényelmesen megteheted a JQuery használatával, míg C#-ban a System.Net.Http és a Newtonsoft.Json alkalmazásával. De ez időt vesz igénybe. Ezért egyszerűen használhatsz valamilyen kliens könyvtárat.
Jelenleg több kész kliens könyvtár érhető el:
- JavaScript: ; támogatja a Camundát
- Java: ; támogatja a Camundát
- C#: és Ezek a projektek jelenleg átmeneti állapotban vannak, és szinte inaktívak, de jó kiindulópontként szolgálhatnak.
- PHP: — nem túl teljes és nem tartalmazza a legfrissebb API-változásokat, de tudok olyan projektekről, amelyek használják.
A JavaScript és Java kivételével a kliens könyvtárak nem részei a Camunda termékének. Ne várd, hogy minden Camunda REST API funkciót támogatnak. Ha egy könyvtár nem kínál egy adott funkciót, az nem jelenti, hogy az nem létezik, mindig ellenőrizd a Camunda REST API-t. A tipikus projektek könyvtárakat használnak kiindulópontként és sablonként.
C# példa
A fent megadott kliens könyvtár használatával egyszerűen így írhatjuk:
var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
// Telepítjük a BPMN XML fájlt az erőforrásokból
camunda.RepositoryService.Deploy("trip-booking", new ListA teljes működő forráskódot megtalálhatod az interneten: ; Egy másik példa elérhető itt .
Пример с 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 + " - hozzáadva valami";
callback(null, {
variables: {
someNewData: someNewData
}
});
});
workers.shutdown();
További információkat találhat a weboldalon
Alternatív módszerek a Camunda indítására
Felhasználói Docker kép a "Camunda standalone WAR"-ral
A Camunda kész Docker képén kívül saját magad is elkészítheted a Tomcat-ot (például a hivatalos Tomcat Docker képek alapján), majd bemásolhatod a Camundát, mint az ún. WAR-fájlok egyikét.

Ha sok további követelményed van, és tudod konfigurálni a Java build környezetet, akkor a Camunda Standalone WAR-t is beállíthatod. Állítsd be a Maven buildet az alábbi példák szerint: build vagy build .
A Camunda Tomcat disztribúció futtatása
Egy másik lehetőség, hogy egyszerűen letöltöd a Camunda Tomcat disztribúciót, kicsomagolod, és elindítod. Ehhez csak a Java Runtime Environment (JRE) szükséges a számítógépeden. Ezt könnyen .

Ahhoz, hogy módosítsd az adatbázist vagy bármi mást csinálj, be kell állítanod a Tomcat-ot, ahogy . Tudom, hogy a Tomcat bonyolultnak tűnhet, de valójában nagyon egyszerű. És a Google tudja a válaszokat mindenre, amire szükséged lehet az út során.
A Camunda futtatása Tomcat segítségével
Utolsó alternatíva, hogy saját magad konfigurálod a Tomcat-ot és telepíted a Camundát, . Ez lehetőséget ad arra, hogy bármilyen verziót használj, amit csak szeretnél, vagy például telepítheted Windows szolgáltatásként is.
A Camunda üzembe helyezése
Általában ehhez szükséges lesz némi végső beállítást végezni a Camunda indításához. A Camundában vannak ajánlások, amelyek ezt nagyon részletesen leírják, de ezt a cikkben nem fogom érinteni — csak egy példát említek: az alapértelmezett disztribúció REST API-ja nincs hitelesítésre beállítva. Lehet, hogy szeretnéd ezt módosítani.
Summary
Ahogy észrevetted, a Camundával való munka nagyon egyszerű, függetlenül attól, hogy milyen nyelvet használsz. A kulcsfontosságú pont az, hogy minden interakció a REST API-n keresztül történik. A telepítés is meglehetősen egyszerű, különösen a Docker használatával.
Forrás: habr.com
