Korištenje Camunde za jednostavnu orkestraciju temeljenu na REST-u i Workflow Engineu (bez Jave)

Hej Habr! Vašoj pozornosti predstavljam prijevod članka "Koristite Camundu kao jednostavan za korištenje REST-bazirani motor za orkestraciju i tijek rada (bez dodirivanja Jave)" autora Bernda Rückera.

07.07.2020/XNUMX/XNUMX, prijevod Članak Bernd Rucker

Korištenje Camunde za jednostavnu orkestraciju temeljenu na REST-u i Workflow Engineu (bez Jave)

Često raspravljam o arhitekturi mikroservisa s ljudima koji ne poznaju Javu: C# programerima, Node.JS/JavaScript programerima ili ljubiteljima Golanga. Svi su oni suočeni s činjenicom da im je potreban mehanizam orkestracije u mikroservisnoj arhitekturi ili samo alat za pojednostavljenje tijeka rada i stjecanje mogućnosti naručivanja, rukovanja vremenskim ograničenjima, Saga i kompenzacijskim transakcijama.

BPM platforma sa open source iz Camunde super za takve zadatke. Pogodnost programera jedna je od ključnih značajki proizvoda. Ali ako pogledate njezinu dokumentaciju, mogli biste steći dojam da je Camundina "prijateljski raspoloženost" uglavnom usmjerena na Java programere. Platforma pruža mnogo mogućnosti za povezivanje vlastitih funkcija i ekstenzija, ali sve se radi u Javi. Je li stvarno?

Ne! Zapravo, možete jednostavno pokrenuti Camundu bez ikakvog znanja o Javi i postaviti arhitekturu za kod na bilo kojem jeziku po vašem izboru. U ovom ćemo članku pogledati:

  • osnovna arhitektura;
  • REST API
  • savjetovanje o postojećim klijentskim bibliotekama za jezike koji nisu Java;
  • primjer korištenja C# i Node.JS;
  • načini pokretanja Camunda poslužitelja (Docker ili Tomcat).

arhitektura

Camunda je napisana u Javi i za rad joj je potreban Java Virtual Machine (JVM). Camunda pruža REST API koji vam omogućuje pisanje na bilo kojem jeziku koji želite i korištenje REST-a s Camundom:

Korištenje Camunde za jednostavnu orkestraciju temeljenu na REST-u i Workflow Engineu (bez Jave)

Tijek rada u Camundi definiran je u BPMN-u, koji je u osnovi XML datoteka. Može se modelirati s Modelar Camunda.

Pokretanje Camunde kroz unaprijed izgrađenu Docker sliku

Najlakši način za pokretanje Camunde je korištenje Dockera. Alternativni načini pokretanja Camunde opisani su kasnije u ovom članku.

Korištenje Camunde za jednostavnu orkestraciju temeljenu na REST-u i Workflow Engineu (bez Jave)

U ovom slučaju jednostavno pokrenite:

  docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest

Ne morate brinuti o Linuxu, JVM-ovima ili Tomcatsima. Docker datoteke i osnovna dokumentacija (na primjer, upute za povezivanje s potrebnim bazama podataka) dostupni su na Github.

Ako želite pokrenuti Camunda Enterprise Edition, to možete jednostavno promijeniti dockerfile.

Međutim, pokretanje Camunde s Dockerom ima jednu lošu stranu: završit ćete s verzijom Tomcata koja ne uključuje uvijek najnovije popravke. Da biste to zaobišli, možete izraditi vlastitu Docker sliku na temelju željene Tomcat distribucije, kao što je prikazano u ovom primjeru, ili upotrijebiti jedno od rješenja opisanih u nastavku.

Implementacija modela procesa

Pogledajmo primjer korištenja Saga predloška za klasičnu rezervaciju putovanja gdje želite pokrenuti tri akcije zaredom i elegantno nadoknaditi uspješno dovršene radnje u slučaju kasnijeg neuspjeha. Predstavljeno u BPMN obliku, izgleda ovako:

Korištenje Camunde za jednostavnu orkestraciju temeljenu na REST-u i Workflow Engineu (bez Jave)

Sada možete koristiti REST API za implementaciju modela procesa. Recimo da ga spremite kao trip.bpmn i pokrenete Camundu preko Dockera tako da bude dostupan 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

Sada možete trčati nove instance tijeka rada koristeći REST API i proslijedite podatke koje želite vidjeti kao varijable instance tijeka rada:

  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

Sljedeće zanimljivo pitanje je: kako Camunda naziva procedure poput rezervacije automobila? Camunda ne može samo odmah pozivati ​​usluge (Push-princip) koristeći neke ugrađene konektori, ali i staviti radne predmete u neku vrstu ugrađenog reda. Radnik tada može dohvatiti radne stavke putem REST-a, obaviti posao i reći Camundi da dovrši (princip povlačenja).

Korištenje Camunde za jednostavnu orkestraciju temeljenu na REST-u i Workflow Engineu (bez Jave)

Dakle, prvo morate izvršiti dohvatiIzaključaj (jer drugi radnici mogu primati zadatke u isto vrijeme za skaliranje sustava):

  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

Onda to reci Camundi radnik završio posao (imajte na umu da morate unijeti vanjski ID zadatka primljen u prvom zahtjevu):

  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 to - još uvijek vam nije trebala Java, zar ne? I to je dovoljno za početak!

Knjižnice klijenata

Pozivanje REST API-ja jednostavno je u bilo kojem programskom jeziku. U JavaScriptu se to praktično radi pomoću JQueryja, a u C# pomoću System.Net.Http i Newtonsoft.Json. Ali ovo će potrajati. Dakle, možete jednostavno koristiti neku klijentsku biblioteku.

Trenutno je dostupno nekoliko gotovih knjižnica klijenata:

  • JavaScript: link. Podupirao Camunda;
  • Java: link. Podupirao Camunda;
  • C #:link и link. Oba ova projekta su u srednjem stanju i praktički miruju, ali mogu poslužiti kao dobra polazna točka;
  • PHP: link - nije previše potpun i ne uključuje najnovije promjene API-ja, ali znam projekte koji ga koriste.

Uz izuzetak JavaScripta i Jave, klijentske biblioteke nisu dio samog Camunda proizvoda. Ne očekujte da podržavaju sve Camunda REST API značajke. Samo zato što biblioteka ne pruža određenu funkciju ne znači da je nema, uvijek provjerite Camundin REST API. Referentni projekti koriste knjižnice kao polazište i predložak.

C# primjer

Koristeći gornju biblioteku klijenta, možemo jednostavno napisati:

  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", "..." }
    });

Potpuno radni izvorni kod može se pronaći na internetu: link. Još jedan primjer dostupan je na link.

Primjer 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();

Više informacija možete pronaći na web stranici github.com

Alternativni načini za pokretanje Camunde

Prilagođena Docker slika s "Camunda standalone WAR"

Kao alternativu unaprijed izgrađenoj Docker slici iz Camunde, možete sami pripremiti Tomcat (na primjer, na temelju službenih Docker Tomcat slika) i zatim kopirati Camundu u nju kao jednu od takozvanih WAR datoteka.

Korištenje Camunde za jednostavnu orkestraciju temeljenu na REST-u i Workflow Engineu (bez Jave)

Ako imate mnogo dodatnih zahtjeva i možete postaviti Java okruženje za izgradnju, također možete postaviti Camunda Standalone war. Postavite Maven build kao u ovim primjerima: build Maven s ratnom konfiguracijom odnosno montaža Maven s prekrivanjem.

Pokretanje distribucije Camunda Tomcat

Druga mogućnost je jednostavno preuzeti distribuciju Camunda Tomcat, raspakirati je i pokrenuti. Ovo zahtijeva samo Java Runtime Environment (JRE) instaliranu na vašem računalu. Može se lako preuzmi odavde.

Korištenje Camunde za jednostavnu orkestraciju temeljenu na REST-u i Workflow Engineu (bez Jave)

Kako biste promijenili bazu podataka ili učinili bilo što drugo, trebate konfigurirati Tomcat kao opisano u dokumentaciji. Znam da Tomcat može zvučati komplicirano, ali zapravo je vrlo jednostavan. A Google zna odgovore na sve što može biti potrebno u procesu.

Pokretanje Camunde pomoću Tomcata

Zadnja alternativa je da sami postavite Tomcat i u njega instalirate Camundu, slijedeći opis instalacije. To će vam dati mogućnost da koristite bilo koju verziju Tomcata koju želite ili da ga instalirate kao Windows uslugu, na primjer.

Puštanje Camunde u proizvodnju

Ovo će obično zahtijevati završno podešavanje za pokretanje Camunde. Postoje smjernice u Camundi koje to opisuju vrlo detaljno, ali neću ulaziti u njih u ovom članku - navest ću samo jedan primjer: REST API distribucije nije konfiguriran za autentifikaciju prema zadanim postavkama. Možda biste željeli ovo promijeniti.

Zaključak-up

Kao što vidite, vrlo je lako započeti s Camundom, bez obzira na jezik koji koristite. Ključna stvar je da se sva interakcija odvija kroz REST API. Instalacija je također prilično jednostavna, posebno kada koristite Docker.

Izvor: www.habr.com

Dodajte komentar