A Camunda használata kényelmes orkestrációhoz, REST és Workflow Engine (Java nélkül)

Helló, Habr! Örömmel mutatom be az írás fordítását. „Használja a Camundát mint egy könnyen használható REST-alapú orchestrációs és munkafolyamat-motort (Java érintése nélkül)“ szerző Bernd Rücker.

2020.07.07., fordítás cikkből származnak Bernd Rücker

A Camunda használata kényelmes orkestrációhoz, REST és Workflow Engine (Java nélkül)

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, Camunda nyílt forráskódú 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 Camunda használata kényelmes orkestrációhoz, REST és Workflow Engine (Java nélkül)

A Camundában a munkafolyamatokat BPMN-ben határozzák meg, amely főként egy XML-fájl. Ezt modellezheti a Camunda Modeler.

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.

A Camunda használata kényelmes orkestrációhoz, REST és Workflow Engine (Java nélkül)

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 Githubot.

Ha el szeretné indítani a Camunda Enterprise Edition-t, könnyen módosíthatja Dockerfile.

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:

A Camunda használata kényelmes orkestrációhoz, REST és Workflow Engine (Java nélkül)

Most használhatja a REST API-t a folyamatmodell telepítéséhez. 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 a REST API segítségével, és átadhatja azokat az adatokat, amelyeket változókként szeretne látni a munkafolyamat példányában: 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 , hanem munkadarabokat is elhelyezhet egyfajta beépített sorban. Ezután a worker REST-en keresztül kaphatja meg a munkadarabokat, végezheti el a feladatot, és tájékoztathatja a Camundát a befejezésről (Pull-Principle).Tehát először végre kell hajtania

A Camunda használata kényelmes orkestrációhoz, REST és Workflow Engine (Java nélkül)

fetchAndLock mivel más worker-ek egyidejűleg kaphatják a feladatokat a rendszer skálázása érdekében: 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 (ne feledje, hogy meg kell adnia az első kéréssel kapott külső feladat azonosítójá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: link; támogatja a Camundát
  • Java: link; támogatja a Camundát
  • C#:link és linkEzek a projektek jelenleg átmeneti állapotban vannak, és szinte inaktívak, de jó kiindulópontként szolgálhatnak.
  • PHP: link — 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 List {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Munkások regisztrálása
  registerWorker("reserve-car", externalTask => {
    // itt végezheted a valós dolgot! Pl. sysout :-)
    Console.WriteLine("Autó foglalása most...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Autó törlése most...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Szálloda foglalása most...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // További munkások regisztrálása...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary()
    {
      {"someBookingData", "..." }
    });

A teljes működő forráskódot megtalálhatod az interneten: link; Egy másik példa elérhető itt link.

Пример с 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 github.com

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.

A Camunda használata kényelmes orkestrációhoz, REST és Workflow Engine (Java nélkül)

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 Maven WAR konfigurációval vagy build Maven Overlay-ral.

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 letöltheted innen.

A Camunda használata kényelmes orkestrációhoz, REST és Workflow Engine (Java nélkül)

Ahhoz, hogy módosítsd az adatbázist vagy bármi mást csinálj, be kell állítanod a Tomcat-ot, ahogy az útmutatóban le van írva. 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, a telepítési leírás követésével. 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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster