Ahoj, Habr! Představuji vám překlad článku autora Bernda Rückera.
07.07.2020, překlad Bernd Rücker

Č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 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:

Pracovní postupy v Camundě jsou definovány v BPMN, což je většinou XML soubor. Lze je modelovat pomocí .
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.

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 .
Pokud chcete spustit Camunda Enterprise Edition, můžete to snadno změnit .
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:

Nyní můžete použít . 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 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 , 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).

Takže nejprve musíte provést 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 (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: . Podporováno Camunda;
- Java: . Podporováno Camunda;
- C#: a . Obě tyto projekty jsou v přechodném stavu a prakticky nečinné, ale mohou sloužit jako dobrý výchozí bod;
- PHP: — 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 ListKompletní pracovní zdrojový kód lze najít na internetu: . Další příklad je dostupný na adrese .
Пример с 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
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ů.

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í nebo sestavení .
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 .

Pokud chcete změnit databázi nebo udělat něco jiného, musíte nastavit Tomcat, jak . 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, . 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
