07.07.2020/XNUMX/XNUMX, preklad Článok Bernd Rucker
Č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:
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.
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:
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:
Ď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).
Takže najprv musíte vykonať fetchAndLock (pretože ostatní pracovníci môžu súčasne prijímať úlohy na škálovanie systému):
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:
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.
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.
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.
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.