Použití Camundy pro snadnou orchestraci založenou na REST a Workflow Engine (bez Javy)

Ahoj, Habr! Představuji vám překlad článku „Použijte Camundu jako snadno ovladatelnou orchestraci a workflow engine založenou na REST (bez nutnosti programování v Javě)“ autora Bernda Rückera.

07.07.2020, překlad na stránkách Maven Apache Project Bernd Rücker

Použití Camundy pro snadnou orchestraci založenou na REST a Workflow Engine (bez Javy)

Často diskutují o mikroservisní architektuře s lidmi, kteří nemají zkušenosti s Javou: vývojáři C#, Node.JS/JavaScript nebo příznivci Golangu. Všichni se setkávají s potřebou mít mechanismus orchestrace v mikroservisní architektuře nebo jen nástroj pro optimalizaci pracovního postupu a možnost zpracování, řízení prodlev, Saga a kompenzačních transakcí.

BPM platforma s otevřeným zdrojovým kódem od Camundy je ideální pro takové úkoly. Přívětivost k vývojáři je jedním z klíčových rysů produktu. Ale pokud se podíváte na jeho dokumentaci, může to vypadat, že většina „přívětivosti“ Camundy je zaměřena na Java vývojáře. Platforma poskytuje mnoho možností pro napojení vlastních funkcí a rozšíření, ale to vše se dělá v Javě. Je to skutečně tak?

Ne! Ve skutečnosti je možné snadno spustit Camundu bez jakýchkoliv znalostí Javy a nastavit architekturu pro kód v jakémkoliv jazyce podle vašeho výběru. V tomto článku se zaměříme na:

  • základní architekturu;
  • REST API;
  • tipy na existující klientské knihovny pro jazyky odlišné od Javy;
  • příklad použití C# a Node.JS;
  • způsoby spuštění serveru Camunda (Docker nebo Tomcat).

Architektura

Camunda je napsána v Javě a pro spuštění vyžaduje virtuální stroj Java (JVM). Camunda poskytuje REST API, které vám umožňuje psát v jakémkoliv jazyce, který se vám líbí, a používat REST s Camundou:

Použití Camundy pro snadnou orchestraci založenou na REST a Workflow Engine (bez Javy)

Pracovní postupy v Camundě jsou definovány v BPMN, což je většinou XML soubor. Lze je modelovat pomocí Camunda Modeler.

Spuštění Camundy přes předem vytvořený obraz Docker

Nejjednodušší způsob, jak spustit Camundu, je použít Docker. Alternativní způsoby spuštění Camundy jsou popsány dále v tomto článku.

Použití Camundy pro snadnou orchestraci založenou na REST a Workflow Engine (bez Javy)

V tomto případě stačí jednoduše spustit:

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

Nemusíte se obávat o Linux, virtuální stroje Java nebo Tomcats. Dockerfiles a základní dokumentace (např. pokyny k připojení k požadovaným databázím) jsou k dispozici na Github.

Pokud chcete spustit Camunda Enterprise Edition, můžete to snadno změnit Dockerfile.

Nicméně, spuštění Camunda pomocí Dockeru má jednu nevýhodu: získáte verzi Tomcat, která vždy neobsahuje poslední opravy. Abychom to nějak obešli, můžete si vytvořit vlastní Docker obraz založený na potřebné distribuci Tomcat, jak je ukázáno v tomto příkladu, nebo využít jedno z řešení popsaných níže.

Nasazení modelu procesu

Podívejme se na příklad, kdy použijeme vzor Saga pro klasickou rezervaci cest, kde chcete spustit tři akce po sobě a správně kompenzovat úspěšně provedené akce v případě pozdější chyby. Představuje jej model BPMN následujícím způsobem:

Použití Camundy pro snadnou orchestraci založenou na REST a Workflow Engine (bez Javy)

Nyní můžete použít REST API pro nasazení modelu procesu. Předpokládejme, že jste jej uložili pod názvem trip.bpmn a spustili Camunda přes Docker, aby byl 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

Nyní můžete spouštět nové instance pracovního procesu pomocí REST API a předávat data, která chcete vidět jako proměnné instance pracovního procesu:

  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

Další zajímavá otázka: jak Camunda vyvolává procedury, jako je rezervace auta? Camunda může nejen okamžitě zavolat služby (Push-Principle), pomocí některých vestavěných konektorů, ale také umísťovat pracovní prvky do jakési vestavěné sekvence. Poté může pracovník získat pracovní prvky přes REST, vykonat práci a informovat Camundu o dokončení (Pull-Principle).

Použití Camundy pro snadnou orchestraci založenou na REST a Workflow Engine (bez Javy)

Takže nejprve musíte provést fetchAndLock protože ostatní pracovníci mohou získat úkoly současně pro škálování 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

Poté informujte Camundu, že pracovník dokončil práci (všimněte si, že musíte uvést identifikátor externího úkolu, který jste obdrželi v prvním dotazu):

  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še – stále jste nepotřebovali žádnou Javu, že? A to stačí pro začátek!

Klientské knihovny

Volání REST API je snadné v jakémkoli programovacím jazyce. V JavaScriptu je pohodlné to dělat pomocí JQuery, a v C# použijte System.Net.Http a Newtonsoft.Json. Ale to nějaký čas potrvá. Proto můžete jednoduše použít nějakou klientskou knihovnu.

V současné době je k dispozici několik připravených klientských knihoven:

  • JavaScript: odkaz. Podporováno Camunda;
  • Java: odkaz. Podporováno Camunda;
  • C#:odkaz a odkaz. Obě tyto projekty jsou v přechodném stavu a prakticky nečinné, ale mohou sloužit jako dobrý výchozí bod;
  • PHP: odkaz — není příliš kompletní a nezahrnuje nejnovější změny API, ale znám projekty, které ji používají.

S výjimkou JavaScriptu a Javy, klientské knihovny nejsou součástí samotného produktu Camunda. Neočekávejte, že budou podporovat všechny funkce REST API Camunda. Pokud knihovna nenabízí určitou funkci, neznamená to, že tam není, vždy si ověřte REST API Camunda. Standardní projekty používají knihovny jako výchozí body a šablony.

Příklad s C#

Použitím výše uvedené klientské knihovny můžeme jednoduše napsat:

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  	// Nasadit BPMN XML soubor ze zdrojů
  camunda.RepositoryService.Deploy("trip-booking", new List {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  	// Registrovat pracovníky
  registerWorker("reserve-car", externalTask => {
    // zde můžete udělat skutečnou věc! Jako sysout :-)
    Console.WriteLine("Rezervuji auto...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Ruším auto...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Rezervuji hotel...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Registrovat více pracovníků...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary()
    {
      {"someBookingData", "..." }
    });

Kompletní pracovní zdrojový kód lze najít na internetu: odkaz. Další příklad je dostupný 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 + " - přidáno něco";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

Více informací naleznete na webu github.com

Alternativní způsoby spuštění Camundy

Uživatelský obraz Docker s „Camunda standalone WAR“

Místo hotového obrazu Docker z Camundy si můžete sami připravit Tomcat (například na základě oficiálních obrazů Docker Tomcat) a pak do něj zkopírovat Camundu jako jeden z takzvaných WAR souborů.

Použití Camundy pro snadnou orchestraci založenou na REST a Workflow Engine (bez Javy)

Pokud máte mnoho dalších požadavků a můžete nastavit prostředí pro sestavení Java, můžete také nastavit Camunda Standalone war. Nastavte sestavení Maven podle těchto příkladů: sestavení Maven s konfigurací war nebo sestavení Maven s Overlay.

Spuštění distribuce Camunda Tomcat

Další možností je jednoduše stáhnout distribuci Camunda Tomcat, rozbalit ji a spustit. K tomu stačí mít nainstalované Java Runtime Environment (JRE) na vašem počítači. To lze snadno stáhnout odsud.

Použití Camundy pro snadnou orchestraci založenou na REST a Workflow Engine (bez Javy)

Pokud chcete změnit databázi nebo udělat něco jiného, musíte nastavit Tomcat, jak je popsáno v dokumentaci. Vím, že Tomcat se může zdát obtížný, ale ve skutečnosti je to velmi jednoduché. A Google ví odpovědi na všechno, co by mohlo být potřeba během procesu.

Spuštění Camundy pomocí Tomcat

Poslední alternativou je nastavit Tomcat a nainstalovat do něj Camundu, podle popisu instalace. To umožní používat jakoukoli verzi Tomcat, kterou preferujete, nebo ji například nainstalovat jako službu Windows.

Spuštění Camundy v produkci

Obvykle je nutné provést nějaká konečná nastavení pro spuštění Camundy. V Camundě existují doporučení, která to velmi podrobně popisují, ale nebudu je v tomto článku zmiňovat — zmíním jen jeden příklad: výchozí distribuce REST API není nakonfigurována na autentizaci. Možná budete chtít toto změnit.

Závěrečné shrnutí

Jak jste možná zaznamenali, začít pracovat s Camundou je velmi jednoduché, bez ohledu na jazyk, který používáte. Klíčovým bodem je, že veškerá interakce probíhá prostřednictvím REST API. Instalace je také poměrně jednoduchá, zejména při použití Docker.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster