Gyakran beszélek a mikroszolgáltatás-architektúráról nem Java-sokkal: C#-fejlesztőkkel, Node.JS/JavaScript-fejlesztőkkel vagy Golang-rajongókkal. Mindannyian szembesülnek azzal a ténnyel, hogy szükségük van egy hangszerelési mechanizmusra egy mikroszolgáltatási architektúrában, vagy csak egy olyan eszközre, amely racionalizálja a munkafolyamatot, és lehetővé teszi a rendelések, az időtúllépések, a Saga és a kompenzációs tranzakciók kezelését.
BPM platformmal nyílt forráskódú Camunda kiváló az ilyen feladatokra. A fejlesztőbarátság a termék egyik legfontosabb jellemzője. De ha megnézzük a dokumentációját, az a benyomásunk támadhat, hogy a Camunda „barátságossága” főként a Java fejlesztőket célozza meg. A platform számos lehetőséget kínál saját funkciók és bővítmények összekapcsolására, de mindez Java nyelven történik. Ez valóban?
Nem! Valójában könnyedén futtathatja a Camundát Java-ismeretek nélkül, és beállíthatja a kód architektúráját bármely választott nyelven. Ebben a cikkben megvizsgáljuk:
alapvető architektúra;
REST API
tanácsadás meglévő klienskönyvtárakkal kapcsolatban a Javatól eltérő nyelveken;
példa a C# és a Node.JS használatával;
a Camunda szerver indításának módjai (Docker vagy Tomcat).
építészet
A Camunda Java nyelven íródott, és futtatásához Java virtuális gépre (JVM) van szüksége. A Camunda REST API-t biztosít, amely lehetővé teszi, hogy bármilyen nyelven írjon, és használja a REST-et a Camundával:
A Camunda munkafolyamatait BPMN-ben határozzák meg, amely alapvetően egy XML-fájl. Ezzel lehet modellezni Camunda modellező.
A Camunda futtatása egy előre elkészített Docker-képen keresztül
A Camunda futtatásának legegyszerűbb módja a Docker használata. A Camunda elindításának alternatív módjait a cikk későbbi részében ismertetjük.
Ebben az esetben egyszerűen futtassa:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Nem kell aggódnia a Linux, a JVM vagy a Tomcat miatt. A Docker-fájlok és az alapvető dokumentációk (például a szükséges adatbázisokhoz való kapcsolódási utasítások) a címen érhetők el GitHub.
Ha a Camunda Enterprise Editiont szeretné futtatni, könnyen módosíthatja dockerfile.
A Camunda Dockerrel való futtatásának azonban van egy hátránya: a végén a Tomcat olyan verzióját kapja, amely nem mindig tartalmazza a legújabb javításokat. Ennek megkerüléséhez létrehozhat saját Docker-képet a kívánt Tomcat-eloszlás alapján, amint az ebben a példában látható, vagy használhatja az alább ismertetett megoldások egyikét.
Folyamatmodell bevezetése
Nézzünk egy példát a Saga sablon használatára egy klasszikus utazási foglaláshoz, ahol egymás után három műveletet kíván elindítani, és későbbi hiba esetén kecsesen kompenzálni a sikeresen végrehajtott műveleteket. BPMN formában ábrázolva így néz ki:
Most már használhatod REST API a folyamatmodell üzembe helyezéséhez. Tegyük fel, hogy elmented trip.bpmn néven, és a Camundát a Dockeren keresztül futtatod, így elérhető a localhost:8080:
A következő érdekes kérdés: hogyan hívja le a Camunda az olyan eljárásokat, mint az autófoglalás? A Camunda nem csak a szolgáltatásokat tudja azonnal hívni (Push-Principle) valamilyen beépített funkció segítségével csatlakozók, hanem egyfajta beépített rendbe is rakja a munkadarabokat. A dolgozó ezután lekérheti a munkaelemeket a REST-en keresztül, elvégezheti a munkát, és megmondhatja Camundának, hogy fejezze be (Pull-Principle).
Tehát először végre kell hajtani fetchAndLock (mivel más dolgozók is kaphatnak feladatokat egyidejűleg a rendszer méretezéséhez):
Ennyi – még mindig nem volt szüksége Java-ra, igaz? És ez elég is az induláshoz!
Ügyfélkönyvtárak
A REST API meghívása bármely programozási nyelven egyszerű. JavaScriptben ez kényelmesen megtehető a JQuery használatával, C#-ban pedig a System.Net.Http és a Newtonsoft.Json használatával. De ehhez idő kell. Tehát csak néhány ügyfélkönyvtárat használhat.
Jelenleg számos kész ügyfélkönyvtár áll rendelkezésre:
C #:link и link. Mindkét projekt köztes állapotban van, gyakorlatilag szunnyad, de jó kiindulópontként szolgálhat;
PHP: link - nem túl teljes, és nem tartalmazza a legújabb API-módosításokat, de ismerek olyan projekteket, amelyek ezt használják.
A JavaScript és a Java kivételével az ügyfélkönyvtárak nem részei magának a Camunda terméknek. Ne várja el tőlük, hogy támogassák a Camunda REST API összes funkcióját. Az, hogy egy könyvtár nem biztosít egy bizonyos funkciót, nem jelenti azt, hogy nincs is, mindig ellenőrizze a Camunda REST API-ját. A referenciaprojektek könyvtárakat használnak kiindulási pontként és sablonként.
C# példa
A fenti klienskönyvtár használatával egyszerűen a következőket írhatjuk:
var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
// Deploy the BPMN XML file from the resources
camunda.RepositoryService.Deploy("trip-booking", new List<object> {
FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
});
// Register workers
registerWorker("reserve-car", externalTask => {
// here you can do the real thing! Like a sysout :-)
Console.WriteLine("Reserving car now...");
camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
});
registerWorker("cancel-car", externalTask => {
Console.WriteLine("Cancelling car now...");
camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
});
registerWorker("book-hotel", externalTask => {
Console.WriteLine("Reserving hotel now...");
camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
});
// Register more workers...
StartPolling();
string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary<string, object>()
{
{"someBookingData", "..." }
});
A teljesen működő forráskód megtalálható az interneten: link. Egy másik példa a címen érhető el link.
További információk a weboldalon találhatók github.com
A Camunda elindításának alternatív módjai
Egyéni Docker-kép a „Camunda standalone WAR” funkcióval
A Camunda előre elkészített Docker-képének alternatívájaként elkészítheti saját maga a Tomcat-ot (például a hivatalos Docker Tomcat képek alapján), majd az úgynevezett WAR-fájlok közé másolhatja bele a Camundát.
Ha sok további követelménye van, és be tud állítani egy Java build környezetet, akkor beállíthatja a Camunda Standalone war alkalmazást is. Állítson be egy Maven buildet, mint az alábbi példákban: build Maven háborús konfigurációval vagy összeszerelés Maven Overlay-vel.
A Camunda Tomcat disztribúció indítása
Egy másik lehetőség a Camunda Tomcat disztribúció letöltése, kicsomagolása és futtatása. Ehhez csak a számítógépére telepített Java Runtime Environment (JRE) szükséges. Könnyen lehet letöltés innen.
Az adatbázis megváltoztatásához vagy bármi máshoz konfigurálnia kell a Tomcatet dokumentációban leírtak. Tudom, hogy a Tomcat bonyolultnak hangzik, de valójában nagyon egyszerű. A Google pedig mindenre tudja a választ, amire a folyamat során szükség lehet.
Camunda futtatása Tomcat segítségével
Az utolsó alternatíva az, hogy saját maga állítja be a Tomcat-ot, és telepíti bele a Camundát, a telepítési leírást követve. Ez lehetőséget ad arra, hogy a Tomcat bármelyik verzióját használja, vagy például Windows-szolgáltatásként telepítse.
A Camunda gyártásba helyezése
Ez általában némi végső beállítást igényel a Camunda futtatásához. A Camundában vannak irányelvek, amelyek ezt nagyon részletesen leírják, de ebben a cikkben nem térek ki rájuk – csak egy példát említek: a disztribúció REST API-ja alapértelmezés szerint nincs beállítva hitelesítésre. Érdemes lehet ezen változtatni.
Összefoglalás
Amint látja, nagyon könnyű elkezdeni a Camundát, függetlenül a használt nyelvtől. A lényeg 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álatakor.