07.07.2020/XNUMX/XNUMX, překlad články Bernd Rucker
Často diskutuji o architektuře mikroslužeb s lidmi, kteří nepoužívají Java: vývojáři C#, vývojáři Node.JS/JavaScript nebo příznivci Golang. Všichni se potýkají s tím, že potřebují orchestrační mechanismus v architektuře mikroslužeb nebo jen nástroj pro zefektivnění pracovního postupu a získání schopnosti objednávat, zpracovávat timeouty, Saga a kompenzovat transakce.
Platforma BPM s open source od Camundy skvělé pro takové úkoly. Přívětivost pro vývojáře je jednou z klíčových vlastností produktu. Když se ale podíváte do jeho dokumentace, můžete nabýt dojmu, že Camunda svou „vstřícností“ míří hlavně na vývojáře v Javě. Platforma poskytuje spoustu možností pro připojení vlastních funkcí a rozšíření, ale vše se děje v Javě. Je to skutečné?
Ne! Ve skutečnosti můžete snadno spustit Camundu bez jakýchkoli znalostí Javy a nastavit architekturu pro kód v libovolném jazyce podle vašeho výběru. V tomto článku se podíváme na:
základní architektura;
REST API
poradenství ohledně stávajících klientských knihoven pro jazyky jiné než Java;
příklad pomocí C# a Node.JS;
způsoby, jak spustit server Camunda (Docker nebo Tomcat).
architektura
Camunda je napsána v Javě a ke spuštění potřebuje Java Virtual Machine (JVM). Camunda poskytuje REST API, které vám umožňuje psát v libovolném jazyce a používat REST s Camundou:
Pracovní postupy v Camundě jsou definovány v BPMN, což je v podstatě soubor XML. Dá se modelovat s Camunda Modelář.
Spuštění Camundy prostřednictvím předem vytvořeného obrazu Dockeru
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čí spustit:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Nemusíte se bát Linuxu, JVM nebo Tomcatů. Dockerfiles a základní dokumentace (například pokyny pro připojení k požadovaným databázím) jsou k dispozici na GitHub.
Pokud chcete provozovat Camunda Enterprise Edition, můžete to snadno změnit dockerfile.
Spuštění Camundy s Dockerem má však jednu nevýhodu: skončíte s verzí Tomcatu, která ne vždy obsahuje nejnovější opravy. Chcete-li tento problém vyřešit, můžete vytvořit vlastní bitovou kopii Dockeru na základě požadované distribuce Tomcat, jak je znázorněno v tomto příkladu, nebo použít jedno z řešení popsaných níže.
Nasazení procesního modelu
Podívejme se na příklad pomocí šablony Saga pro klasickou rezervaci zájezdu, kde chcete spustit tři akce za sebou a ladně kompenzovat úspěšně dokončené akce v případě pozdějšího selhání. Ve formě BPMN to vypadá takto:
Nyní můžete použít REST API pro nasazení procesního modelu. Řekněme, že to uložíte jako trip.bpmn a spustíte Camundu přes Docker, takže je k dispozici na localhost:8080:
Další zajímavá otázka je: jak Camunda nazývá procedury, jako je rezervace auta? Camunda může nejen okamžitě volat služby (princip Push) pomocí některých vestavěných konektory, ale také dát pracovní předměty do jakéhosi vestavěného pořádku. Pracovník pak může vyzvednout pracovní položky přes REST, provést práci a říct Camundovi, aby dokončil (Princip tažení).
Nejprve tedy musíte provést fetchAndLock (protože ostatní pracovníci mohou současně přijímat úkoly pro škálování systému):
To je ono – ještě jsi žádnou Javu nepotřeboval, že? A to pro začátek stačí!
Klientské knihovny
Volání REST API je snadné v jakémkoli programovacím jazyce. V JavaScriptu se to pohodlně provádí pomocí JQuery a v C# pomocí System.Net.Http a Newtonsoft.Json. Ale to zabere čas. Takže stačí použít nějakou klientskou knihovnu.
V současné době je k dispozici několik hotových klientských knihoven:
C #:odkaz и odkaz. Oba tyto projekty jsou v přechodném stavu a jsou prakticky nečinné, ale mohou sloužit jako dobrý výchozí bod;
PHP: odkaz - není příliš kompletní a neobsahuje nejnovější změny API, ale znám projekty, které to používají.
S výjimkou JavaScriptu a Javy nejsou klientské knihovny součástí samotného produktu Camunda. Neočekávejte, že budou podporovat všechny funkce REST API Camundy. To, že knihovna neposkytuje určitou funkci, neznamená, že tam není, vždy zkontrolujte Camunda REST API. Referenční projekty používají knihovny jako výchozí bod a šablonu.
Příklad C#
Pomocí výše uvedené klientské knihovny můžeme jednoduše napsat:
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", "..." }
});
Plně funkční zdrojový kód lze nalézt online: odkaz. Další příklad je k dispozici na odkaz.
Více informací naleznete na webových stránkách Github.com
Alternativní způsoby spuštění Camundy
Vlastní obrázek dockeru s „Camundou standalone WAR“
Jako alternativu k předem vytvořenému obrazu Docker z Camundy si můžete Tomcat připravit sami (například na základě oficiálních obrázků Docker Tomcat) a poté do něj Camundu zkopírovat jako jeden z tzv. 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 jako v těchto příkladech: build Maven s válečnou konfigurací nebo montáž Maven s překrytím.
Spuštění distribuce Camunda Tomcat
Další možností je jednoduše stáhnout distribuci Camunda Tomcat, rozbalit ji a spustit. K tomu potřebujete pouze Java Runtime Environment (JRE) nainstalované na vašem počítači. Může to být snadno stáhnout odtud.
Chcete-li změnit databázi nebo udělat cokoli jiného, musíte nakonfigurovat Tomcat jako popsané v dokumentaci. Vím, že Tomcat může znít složitě, ale ve skutečnosti je to velmi jednoduché. A Google zná odpovědi na vše, co může být v procesu vyžadováno.
Spuštění Camundy pomocí Tomcatu
Poslední alternativou je nastavit Tomcat sami a nainstalovat do něj Camundu, podle popisu instalace. To vám dá možnost použít kteroukoli verzi Tomcatu, kterou preferujete, nebo ji nainstalovat například jako službu Windows.
Zahájení výroby Camundy
To obvykle vyžaduje nějaké konečné nastavení ke spuštění Camundy. V Camundě existují pokyny, které to popisují velmi podrobně, ale nebudu se jimi v tomto článku zabývat – uvedu pouze jeden příklad: REST API distribuce není ve výchozím nastavení nakonfigurováno pro ověřování. Možná to budete chtít změnit.
Shrneme-up
Jak jste si možná všimli, začít s Camundou je velmi snadné, bez ohledu na jazyk, který používáte. Klíčovým bodem je, že veškerá komunikace probíhá prostřednictvím REST API. Instalace je také docela snadná, zejména při použití Dockeru.