Ahoj, Habr! Predstavujem vám preklad článku autora Bernd Rücker.
07.07.2020, preklad Bernd Rücker

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

Pracovné procesy v Camunda sú definované v BPMN, čo je v podstate XML súbor. Môže sa modelovať pomocou .
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.

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 .
Ak chcete spustiť Camunda Enterprise Edition, môžete ľahko zmeniť .
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:

Teraz môžete použiť . 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ť 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 , 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).

Takže najprv musíte vykonať (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 (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: . Podporuje Camunda;
- Java: . Podporuje Camunda;
- C#: a . Obe tieto projekty sú v prechodnom stave a prakticky nečinné, ale môžu poslúžiť ako dobrý východiskový bod;
- PHP: — 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Úplný pracovný zdrojový kód nájdete na internete: . Ďalší príklad je k dispozícii 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 + " - pridané niečo";
callback(null, {
variables: {
someNewData: someNewData
}
});
});
workers.shutdown();
Podrobnejšie informácie nájdete na stránke
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.

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 alebo zostavenie .
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 .

Aby ste zmenili databázu alebo spravili niečo iné, musíte nastaviť Tomcat, ako . 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, . 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
