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

Čau Habr! Předkládám vaší pozornosti překlad článku „Používejte Camundu jako snadno použitelný nástroj pro orchestraci a pracovní postup založený na REST (aniž byste se dotkli Java)“ od Bernda Rückera.

07.07.2020/XNUMX/XNUMX, překlad články Bernd Rucker

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

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

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

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.

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

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:

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

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:

  curl -w "n" 
-H "Accept: application/json" 
-F "deployment-name=trip" 
-F "enable-duplicate-filtering=true" 
-F "deploy-changed-only=true" 
-F "[email protected]" 
http://localhost:8080/engine-rest/deployment/creat

Nyní můžete běžet nové instance pracovního postupu pomocí REST API a předejte data, která chcete vidět jako proměnné instance 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/<!-- -->FlowingTripBookingSaga<!-- -->/start

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í).

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

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

  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

Tak to řekni Camundovi pracovník dokončil svou práci (všimněte si, že musíte zadat externí ID úlohy přijaté v prvním požadavku):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123", "variables": {}}'<!-- --> 
http://localhost:8080/engine-rest/<!-- -->external-task/EXTERNAL_TASK_ID/complete

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:

  • JavaScript: odkaz. Podporováno Camundou;
  • Java: odkaz. Podporováno Camundou;
  • 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.

Příklad s 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 + " - added something";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

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ů.

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

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.

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

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.

Zdroj: www.habr.com

Přidat komentář