Používanie Camundy na jednoduchú orchestráciu založenú na REST a Workflow Engine (bez Java)

Čau Habr! Do pozornosti dávam preklad článku „Použite Camundu ako ľahko použiteľný nástroj na orchestráciu a pracovný postup založený na REST (bez toho, aby ste sa dotkli Java)“ od Bernda Rückera.

07.07.2020/XNUMX/XNUMX, preklad Článok Bernd Rucker

Používanie Camundy na jednoduchú orchestráciu založenú na REST a Workflow Engine (bez Java)

Často diskutujem o architektúre mikroslužieb s ľuďmi, ktorí nepoužívajú Java: vývojári C#, vývojári Node.JS/JavaScript alebo fanúšikovia Golang. Všetci sa stretávajú s tým, že potrebujú mechanizmus orchestrácie v architektúre mikroslužieb, alebo len nástroj na zefektívnenie pracovného toku a získanie schopnosti objednávať, spracovávať timeouty, Saga a kompenzovať transakcie.

Platforma BPM s open source od Camundy skvelé pre takéto úlohy. Prívetivosť pre vývojárov je jednou z kľúčových vlastností produktu. Ak sa ale pozriete na jeho dokumentáciu, môžete nadobudnúť dojem, že Camunda svojou „prívetivosťou“ cieli najmä na vývojárov v jazyku Java. Platforma poskytuje množstvo možností na pripojenie vlastných funkcií a rozšírení, no všetko prebieha v Jave. Je to naozaj?

Nie! V skutočnosti môžete Camundu ľahko spustiť bez akýchkoľvek znalostí jazyka Java a nastaviť architektúru pre kód v akomkoľvek jazyku podľa vášho výberu. V tomto článku sa pozrieme na:

  • základná architektúra;
  • REST API
  • poradenstvo o existujúcich klientskych knižniciach pre jazyky iné ako Java;
  • príklad s použitím C# a Node.JS;
  • spôsoby spustenia servera Camunda (Docker alebo Tomcat).

architektúra

Camunda je napísaná v jazyku Java a na spustenie potrebuje Java Virtual Machine (JVM). Camunda poskytuje REST API, ktoré vám umožňuje písať v akomkoľvek jazyku, ktorý sa vám páči, a používať REST s Camundou:

Používanie Camundy na jednoduchú orchestráciu založenú na REST a Workflow Engine (bez Java)

Pracovné postupy v Camunde sú definované v BPMN, čo je v podstate súbor XML. Dá sa modelovať s Camunda Modeler.

Spustenie Camundy cez vopred vytvorený obrázok Docker

Najjednoduchší spôsob, ako spustiť Camundu, je použiť Docker. Alternatívne spôsoby spustenia Camundy sú popísané ďalej v tomto článku.

Používanie Camundy na jednoduchú orchestráciu založenú na REST a Workflow Engine (bez Java)

V tomto prípade stačí spustiť:

  docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest

Nemusíte sa báť Linuxu, JVM alebo Tomcatov. Dockerfiles a základná dokumentácia (napríklad pokyny na pripojenie k požadovaným databázam) sú dostupné na GitHub.

Ak chcete spustiť Camunda Enterprise Edition, môžete to ľahko zmeniť Dockerfile.

Spustenie Camundy s Dockerom má však jednu nevýhodu: skončíte s verziou Tomcatu, ktorá nie vždy obsahuje najnovšie opravy. Ak to chcete obísť, môžete si vytvoriť svoj vlastný obrázok Docker na základe požadovanej distribúcie Tomcat, ako je znázornené v tomto príklade, alebo použiť jedno z riešení opísaných nižšie.

Nasadenie modelu procesu

Pozrime sa na príklad s použitím šablóny Saga pre klasickú rezerváciu zájazdu, kde chcete spustiť tri akcie za sebou a ladne kompenzovať úspešne dokončené akcie v prípade neskoršieho zlyhania. Zastúpené vo forme BPMN to vyzerá takto:

Používanie Camundy na jednoduchú orchestráciu založenú na REST a Workflow Engine (bez Java)

Teraz môžete použiť REST API pre nasadenie procesného modelu. Povedzme, že ho uložíte ako trip.bpmn a spustíte Camundu cez Docker, aby bol dostupný na localhost:8080:

  curl -w "n" 
-H "Accept: application/json" 
-F "deployment-name=trip" 
-F "enable-duplicate-filtering=true" 
-F "deploy-changed-only=true" 
-F "[email protected]" 
http://localhost:8080/engine-rest/deployment/creat

Teraz môžete bežať nové inštancie pracovného toku pomocou REST API a odovzdať údaje, ktoré chcete vidieť ako premenné inštancie pracovného toku:

  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

Ďalšou zaujímavou otázkou je: ako Camunda nazýva procedúry, ako je rezervácia auta? Camunda dokáže nielen okamžite volať služby (princíp Push) pomocou niektorých vstavaných konektory, ale aj pracovné predmety dať do akéhosi vstavaného poriadku. Pracovník potom môže získať pracovné položky cez REST, vykonať prácu a povedať Camundovi, aby dokončil (Princíp ťahania).

Používanie Camundy na jednoduchú orchestráciu založenú na REST a Workflow Engine (bez Java)

Takže najprv musíte vykonať fetchAndLock (pretože ostatní pracovníci môžu súčasne prijímať úlohy na škálovanie systému):

  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

Potom to povedz Camunde pracovník dokončil prácu (všimnite si, že musíte zadať externé ID úlohy prijaté v prvej požiadavke):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123", "variables": {}}'<!-- --> 
http://localhost:8080/engine-rest/<!-- -->external-task/EXTERNAL_TASK_ID/complete

To je všetko - ešte stále ste nepotrebovali Javu, však? A to na začiatok stačí!

Klientske knižnice

Volanie REST API je jednoduché v akomkoľvek programovacom jazyku. V JavaScripte sa to pohodlne robí pomocou JQuery a v C# pomocou System.Net.Http a Newtonsoft.Json. To si však vyžiada čas. Takže stačí použiť nejakú klientsku knižnicu.

V súčasnosti je k dispozícii niekoľko hotových klientskych knižníc:

  • JavaScript: odkaz. Podporuje Camunda;
  • Java: odkaz. Podporuje Camunda;
  • C #:odkaz и odkaz. Oba tieto projekty sú v prechodnom stave a sú prakticky nečinné, ale môžu slúžiť ako dobrý východiskový bod;
  • PHP: odkaz - nie je príliš úplný a neobsahuje najnovšie zmeny API, ale poznám projekty, ktoré to používajú.

S výnimkou JavaScriptu a Java nie sú klientske knižnice súčasťou samotného produktu Camunda. Nečakajte, že budú podporovať všetky funkcie REST API Camundy. To, že knižnica neposkytuje určitú funkciu, neznamená, že tam nie je, vždy skontrolujte REST API od Camundy. Referenčné projekty používajú knižnice ako východiskový bod a šablónu.

C# príklad

Pomocou vyššie uvedenej klientskej knižnice môžeme jednoducho napísať:

  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", "..." }
    });

Plne funkčný zdrojový kód možno nájsť online: odkaz. Ďalší príklad je dostupný na odkaz.

Príklad s 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();

Viac informácií nájdete na webovej stránke github.com

Alternatívne spôsoby spustenia Camundy

Vlastný obrázok Docker s „Camundou standalone WAR“

Ako alternatívu k vopred vytvorenému obrazu Docker z Camundy si môžete Tomcat pripraviť sami (napríklad na základe oficiálnych obrázkov Docker Tomcat) a potom do neho skopírovať Camundu ako jeden z takzvaných súborov WAR.

Používanie Camundy na jednoduchú orchestráciu založenú na REST a Workflow Engine (bez Java)

Ak máte veľa ďalších požiadaviek a môžete nastaviť prostredie na zostavenie Java, môžete tiež nastaviť Camunda Standalone war. Nastavte zostavu Maven ako v týchto príkladoch: zostava Maven s vojnovou konfiguráciou alebo montáž Maven s prekrytím.

Spustenie distribúcie Camunda Tomcat

Ďalšou možnosťou je jednoducho stiahnuť distribúciu Camunda Tomcat, rozbaliť ju a spustiť. Vyžaduje si to iba Java Runtime Environment (JRE) nainštalované na vašom počítači. Môže byť ľahko stiahnuť odtiaľto.

Používanie Camundy na jednoduchú orchestráciu založenú na REST a Workflow Engine (bez Java)

Ak chcete zmeniť databázu alebo urobiť čokoľvek iné, musíte nakonfigurovať Tomcat ako popísané v dokumentácii. Viem, že Tomcat môže znieť komplikovane, ale v skutočnosti je to veľmi jednoduché. A Google pozná odpovede na všetko, čo môže byť v procese potrebné.

Spustenie Camundy pomocou Tomcatu

Poslednou alternatívou je nastaviť Tomcat sami a nainštalovať do neho Camundu, podľa popisu inštalácie. To vám dá možnosť použiť ktorúkoľvek verziu Tomcatu, ktorú uprednostňujete, alebo ju nainštalovať napríklad ako službu Windows.

Spustenie Camundy do výroby

To si zvyčajne vyžaduje nejaké konečné nastavenie na spustenie Camundy. V Camunde sú pokyny, ktoré to veľmi podrobne popisujú, ale v tomto článku sa nimi nebudem zaoberať – uvediem len jeden príklad: REST API distribúcie nie je predvolene nakonfigurované na autentifikáciu. Možno to budete chcieť zmeniť.

Zhrnieme-up

Ako vidíte, začať s Camundou je veľmi jednoduché, bez ohľadu na jazyk, ktorý používate. Kľúčovým bodom je, že všetka interakcia sa vykonáva prostredníctvom REST API. Inštalácia je tiež celkom jednoduchá, najmä pri použití Docker.

Zdroj: hab.com

Pridať komentár