Použitie Camunda na pohodlnú orchestráciu na základe REST a Workflow Engine (bez Java)

Ahoj, Habr! Predstavujem vám preklad článku «Použite Camunda ako ľahko použiteľný orchestračný a pracovný motor založený na REST (bez nutnosti zasahovať do Javy)» autora Bernd Rücker.

07.07.2020, preklad článku Bernd Rücker

Použitie Camunda na pohodlnú orchestráciu na základe REST a Workflow Engine (bez Java)

Často diskutujem o mikroservisnej architektúre s ľuďmi, ktorí sú vzdialení od Javy: vývojármi C#, Node.JS/JavaScript alebo priaznivcami Golangu. Všetci sa stretávajú s tým, že potrebujú mechanizmus orchestrace v mikroservisnej architektúre alebo len nástroj na optimalizáciu pracovných procesov a získanie možnosti usporiadania, spracovania časových limitov, Saga a kompenzačných transakcií.

BPM platforma s otvoreným zdrojovým kódom od Camunda je skvele vhodná na takéto úlohy. Priateľskosť voči vývojárovi je jednou z kľúčových vlastností produktu. Ale ak sa pozriete na jeho dokumentáciu, môže sa zdať, že väčšina „priateľskosti“ Camunda je zameraná na Java vývojárov. Platforma ponúka množstvo možností na pripojenie vlastných funkcií a rozšírení, ale to všetko sa deje v Jave. Je to naozaj tak?

Nie! V skutočnosti je možné ľahko spustiť Camunda bez akýchkoľvek znalostí Javy 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úru;
  • REST API;
  • tipy na existujúce klientské knižnice pre jazyky odlišné od Javy;
  • príklad použitia C# a Node.JS;
  • spôsoby spustenia servera Camunda (Docker alebo Tomcat).

Architektúra

Camunda je napísaná v Jave a na spustenie potrebuje virtuálny stroj Java (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 Camunda:

Použitie Camunda na pohodlnú orchestráciu na základe REST a Workflow Engine (bez Java)

Pracovné procesy v Camunda sú definované v BPMN, čo je v podstate XML súbor. Môže sa modelovať pomocou Camunda Modeler.

Spustenie Camunda prostredníctvom predpripraveného obrazu Docker

Najjednoduchší spôsob, ako spustiť Camunda, je použiť Docker. Alternatívne spôsoby spustenia Camunda sú popísané v ďalšej časti tohto článku.

Použitie Camunda na pohodlnú orchestráciu na základe REST a Workflow Engine (bez Java)

V tomto prípade stačí jednoducho spustiť:

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

Nemusíte sa obávať o Linux, virtuálne stroje Java alebo Tomcaty. Dockerfiles a základná dokumentácia (napríklad pokyny na pripojenie k potrebným databázam) sú k dispozícii na Github.

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

Avšak spustenie Camunda pomocou Dockera má jednu nevýhodu: dostanete verziu Tomcat, ktorá nie vždy obsahuje najnovšie opravy. Aby ste to nejako obchádzali, môžete si vytvoriť Docker image na základe požadovanej distribúcie Tomcat, ako je uvedené v tomto príklade, alebo využiť niektoré z riešení popísaných nižšie.

Nasadenie modelu procesu

Pozrime sa na príklad, kde používame šablónu Saga na klasické rezervovanie ciest, kde chcete vyvolať tri akcie po sebe a správne kompenzovať úspešne vykonané akcie v prípade neskoršej chyby. Predstavené vo forme BPMN to vyzerá nasledovne:

Použitie Camunda na pohodlnú orchestráciu na základe REST a Workflow Engine (bez Java)

Teraz môžete použiť REST API na nasadenie modelu procesu. Predpokladajme, že ste ho uložili s názvom trip.bpmn a spustili Camunda 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 "trip.bpmn=@trip.bpmn" 
http://localhost:8080/engine-rest/deployment/creat

Teraz môžete spúšťať nové inštancie pracovného postupu pomocou REST API a prenášať dáta, ktoré chcete vidieť ako premenné inštancie pracovného postupu:

  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//start

Ďalšia zaujímavá otázka: ako Camunda vyvoláva procedúry, ako je rezervácia auta? Camunda môže nielen okamžite vyvolávať služby (Push-Principle), pomocou niektorých vstavaných konektorov, ale aj umiestniť pracovné prvky do akéhosi vstavaného poradia. Po tom môže worker získať pracovné prvky cez REST, vykonať prácu a informovať Camunda o dokončení (Pull-Principle).

Použitie Camunda na pohodlnú orchestráciu na základe REST a Workflow Engine (bez Java)

Takže najprv musíte vykonať fetchAndLock (pretože iní worker-i môžu naraz 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 oznámte Camunda, že worker dokončil prácu (majte na pamäti, že musíte zadať identifikátor external task, ktorý ste získali v prvom požiadavku):

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

A to je všetko — doteraz ste nepotrebovali žiadny Java, však? A to stačí na to, aby ste mohli začať pracovať!

Klientské knižnice

Volanie REST API je jednoduché v akomkoľvek programovacom jazyku. V JavaScripte to môžete pohodlne robiť s JQuery, a v C# sa použije System.Net.Http a Newtonsoft.Json. Ale to si vyžaduje čas. Takže môžete jednoducho využiť nejakú klientskú knižnicu.

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

  • JavaScript: odkaz. Podporuje Camunda;
  • Java: odkaz. Podporuje Camunda;
  • C#:odkaz a odkaz. Obe tieto projekty sú v prechodnom stave a prakticky nečinné, ale môžu poslúžiť ako dobrý východiskový bod;
  • PHP: odkaz — nie príliš kompletná a nezahŕňajúca najnovšie zmeny API knižnica, ale poznám projekty, ktoré ju používajú.

Okrem JavaScriptu a Javy nie sú klientské knižnice súčasťou samotného produktu Camunda. Neočakávajte, že budú podporovať všetky funkcie REST API Camunda. Ak knižnica neposkytuje určitú funkciu, neznamená to, že ju tam niet, vždy si skontrolujte REST API Camunda. Typické projekty používajú knižnice ako východiskový bod a šablónu.

Príklad s C#

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

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  // Nasadiť BPMN XML súbor z resources
  camunda.RepositoryService.Deploy("trip-booking", new List {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Registrovať pracovníkov
  registerWorker("reserve-car", externalTask => {
    // tu môžete robiť skutočnú vec! Napríklad sysout :-)
    Console.WriteLine("Rezervujem auto...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Zrušujem auto...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Rezervujem si hotel...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Registrovať ďalších pracovníkov...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary()
    {
      {"someBookingData", "..." }
    });

Úplný pracovný zdrojový kód nájdete na internete: odkaz. Ďalší príklad je k dispozícii na adrese odkaz.

Пример с 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 + " - pridané niečo";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

Podrobnejšie informácie nájdete na stránke github.com

Alternatívne spôsoby spustenia Camunda

Užívateľský obraz Docker s 'Camunda standalone WAR'

Ako alternatívu k hotovému obrazcu Docker z Camunda si môžete sami pripraviť Tomcat (napríklad na základe oficiálnych obrazov Docker Tomcat) a potom do neho skopírovať Camunda ako jeden z takzvaných WAR súborov.

Použitie Camunda na pohodlnú orchestráciu na základe REST a Workflow Engine (bez Java)

Ak máte veľa dodatočných požiadaviek a môžete si nastaviť prostredie pre zostavovanie Java, môžete si tiež nastaviť Camunda Standalone WAR. Nastavte zostavenie Maven podľa týchto príkladov: zostavenie Maven s konfiguráciou WAR alebo zostavenie Maven s Overlay.

Spustenie distribúcie Camunda Tomcat

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

Použitie Camunda na pohodlnú orchestráciu na základe REST a Workflow Engine (bez Java)

Aby ste zmenili databázu alebo spravili niečo iné, musíte nastaviť Tomcat, ako je popísané v dokumentácii. Viem, že Tomcat sa môže zdať zložitý, ale v skutočnosti je to veľmi jednoduché. A Google pozná odpovede na všetko, čo môže byť potrebné počas tohto procesu.

Spustenie Camunda pomocou Tomcat

Posledná alternatíva je vlastne si nastaviť Tomcat a do neho nainštalovať Camunda, nasledujúce popis inštalácie. To vám umožní používať akúkoľvek verziu Tomcat, ktorú preferujete, alebo ju napríklad nainštalovať ako Windows službu.

Spustenie Camunda do produkcie

Vo všeobecnosti bude potrebné vykonať nejaké konečné nastavenia pre spustenie Camunda. V Camunda existujú odporúčania, ktoré to veľmi podrobne opisujú, ale nebudem sa nimi zaoberať v tomto článku — uvediem len jeden príklad: REST API distribúcie predvolene nie je nastavené na overovanie. Možno budete chcieť to zmeniť.

Zhrnutie výsledkov

Ako ste si mohli všimnúť, pracovať s Camunda je veľmi jednoduché, bez ohľadu na jazyk, ktorý používate. Kľúčový bod spočíva v tom, že všetka interakcia prebieha prostredníctvom REST API. Inštalácia je tiež celkom jednoduchá, najmä pri použití Docker.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster