Uporaba Camunde za enostavno orkestracijo na podlagi REST in Workflow Engine (brez Jave)

Hej Habr! Predstavljam vam prevod članka "Uporabite Camundo kot za uporabo enostaven motor za orkestracijo in potek dela, ki temelji na REST (brez dotikanja Jave)" avtorja Bernd Rücker.

07.07.2020, prevod Člen Bernd Rucker

Uporaba Camunde za enostavno orkestracijo na podlagi REST in Workflow Engine (brez Jave)

Pogosto razpravljam o arhitekturi mikrostoritev z ljudmi, ki ne poznajo Jave: razvijalci C#, razvijalci Node.JS/JavaScript ali ljubitelji Golanga. Vsi se soočajo z dejstvom, da potrebujejo mehanizem orkestracije v arhitekturi mikrostoritev ali samo orodje za racionalizacijo delovnega toka in pridobitev zmožnosti naročanja, obravnavanja časovnih omejitev, Saga in kompenzacijskih transakcij.

BPM platforma z odprtokodni od Camunda super za take naloge. Prijaznost do razvijalcev je ena ključnih lastnosti izdelka. Toda če pogledate njeno dokumentacijo, boste morda dobili vtis, da je Camundina "prijaznost" namenjena predvsem razvijalcem Jave. Platforma ponuja veliko možnosti za povezovanje lastnih funkcij in razširitev, vendar je vse narejeno v Javi. Je res?

ne! Pravzaprav lahko preprosto zaženete Camundo brez znanja o Javi in ​​nastavite arhitekturo za kodo v katerem koli jeziku po vaši izbiri. V tem članku si bomo ogledali:

  • osnovna arhitektura;
  • REST API
  • svetovanje o obstoječih odjemalskih knjižnicah za jezike, ki niso Java;
  • primer z uporabo C# in Node.JS;
  • načine za zagon strežnika Camunda (Docker ali Tomcat).

arhitektura

Camunda je napisana v Javi in ​​za delovanje potrebuje Java Virtual Machine (JVM). Camunda ponuja REST API, ki vam omogoča pisanje v poljubnem jeziku in uporabo REST s Camundo:

Uporaba Camunde za enostavno orkestracijo na podlagi REST in Workflow Engine (brez Jave)

Delovni tokovi v Camundi so definirani v BPMN, ki je v bistvu datoteka XML. Lahko se modelira z Modelir Camunda.

Zagon Camunde skozi vnaprej pripravljeno sliko Docker

Najlažji način za zagon Camunde je uporaba Dockerja. Alternativni načini za zagon Camunde so opisani kasneje v tem članku.

Uporaba Camunde za enostavno orkestracijo na podlagi REST in Workflow Engine (brez Jave)

V tem primeru preprosto zaženite:

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

Ni vam treba skrbeti za Linux, JVM ali Tomcats. Datoteke Docker in osnovna dokumentacija (na primer navodila za povezovanje z zahtevanimi zbirkami podatkov) so na voljo na GitHub.

Če želite zagnati Camunda Enterprise Edition, lahko preprosto spremenite Dockerfile.

Vendar ima izvajanje Camunde z Dockerjem eno slabo stran: na koncu boste imeli različico Tomcata, ki ne vključuje vedno najnovejših popravkov. Če se želite temu izogniti, lahko ustvarite lastno sliko Docker na podlagi želene distribucije Tomcat, kot je prikazano v tem primeru, ali uporabite eno od spodaj opisanih rešitev.

Uvajanje modela procesa

Oglejmo si primer uporabe predloge Saga za klasično rezervacijo potovanja, kjer želite sprožiti tri dejanja zaporedoma in elegantno kompenzirati uspešna dejanja v primeru kasnejšega neuspeha. Predstavljeno v obliki BPMN je videti takole:

Uporaba Camunde za enostavno orkestracijo na podlagi REST in Workflow Engine (brez Jave)

Zdaj lahko uporabite API REST za uvajanje modela procesa. Recimo, da ga shranite kot trip.bpmn in zaženete Camundo prek Dockerja, tako da je na voljo 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

Zdaj lahko tečeš novi primerki poteka dela z uporabo API-ja REST in posredujte podatke, ki jih želite videti kot spremenljivke instance delovnega toka:

  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

Naslednje zanimivo vprašanje je: kako Camunda imenuje postopke, kot je rezervacija avtomobila? Camunda ne more le takoj poklicati storitev (princip Push) z uporabo nekaterih vgrajenih priključki, ampak tudi postavite delovne predmete v nekakšen vgrajen red. Delavec lahko nato pridobi delovne elemente prek REST, izvede delo in pove Camundi, naj dokonča (princip vlečenja).

Uporaba Camunde za enostavno orkestracijo na podlagi REST in Workflow Engine (brez Jave)

Torej, najprej morate izvesti fetchAndLock (ker lahko drugi delavci istočasno prejmejo naloge za prilagajanje sistema):

  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

Potem to povej Camundi delavec opravil delo (upoštevajte, da morate v prvi zahtevi vnesti zunanji ID naloge):

  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 – še vedno niste potrebovali nobene Jave, kajne? In to je dovolj za začetek!

Odjemalske knjižnice

Klicanje API-ja REST je preprosto v katerem koli programskem jeziku. V JavaScriptu je to priročno narejeno z uporabo JQuery, v C# pa z uporabo System.Net.Http in Newtonsoft.Json. Toda to bo trajalo. Tako lahko preprosto uporabite knjižnico strank.

Trenutno je na voljo več že pripravljenih odjemalskih knjižnic:

  • JavaScript: povezava. Podpira Camunda;
  • Java: povezava. Podpira Camunda;
  • C #:povezava и povezava. Oba projekta sta v vmesnem stanju in praktično ne delujeta, vendar lahko služita kot dobro izhodišče;
  • PHP: povezava - ni preveč popoln in ne vključuje najnovejših sprememb API-ja, vendar poznam projekte, ki ga uporabljajo.

Z izjemo JavaScripta in Jave odjemalske knjižnice niso del samega izdelka Camunda. Ne pričakujte, da bodo podpirali vse funkcije Camunda REST API. Samo zato, ker knjižnica ne ponuja določene funkcije, še ne pomeni, da je ni, vedno preverite Camundin REST API. Referenčni projekti uporabljajo knjižnice kot izhodišče in predlogo.

Primer C#

Z uporabo zgornje odjemalske knjižnice lahko preprosto napišemo:

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

Povsem delujočo izvorno kodo lahko najdete na spletu: povezava. Drug primer je na voljo na povezava.

Primer z 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();

Več informacij najdete na spletni strani. Github.com

Alternativni načini za lansiranje Camunde

Slika Dockerja po meri s »Camunda standalone WAR«

Kot alternativo vnaprej zgrajeni sliki Docker iz Camunde lahko sami pripravite Tomcat (na primer na podlagi uradnih slik Docker Tomcat) in nato kopirate Camundo vanjo kot eno od tako imenovanih datotek WAR.

Uporaba Camunde za enostavno orkestracijo na podlagi REST in Workflow Engine (brez Jave)

Če imate veliko dodatnih zahtev in lahko nastavite gradbeno okolje Java, lahko nastavite tudi Camunda Standalone war. Nastavite gradnjo Maven kot v teh primerih: build Maven z vojno konfiguracijo ali montažo Maven s prekrivanjem.

Zagon distribucije Camunda Tomcat

Druga možnost je, da preprosto prenesete distribucijo Camunda Tomcat, jo razpakirate in zaženete. To zahteva le izvajalno okolje Java (JRE), ki je nameščeno na vašem računalniku. Lahko je enostavno prenesite od tukaj.

Uporaba Camunde za enostavno orkestracijo na podlagi REST in Workflow Engine (brez Jave)

Če želite spremeniti bazo podatkov ali narediti kar koli drugega, morate Tomcat konfigurirati tako, kot je opisano v dokumentaciji. Vem, da se Tomcat morda sliši zapleteno, vendar je v resnici zelo preprosto. In Google pozna odgovore na vse, kar se lahko zahteva v procesu.

Zagon Camunde s Tomcatom

Zadnja možnost je, da sami nastavite Tomcat in vanj namestite Camundo, po opisu namestitve. To vam bo dalo možnost, da uporabite katero koli različico Tomcata, ki vam je ljubša, ali pa jo na primer namestite kot storitev Windows.

Lansiranje Camunde v proizvodnjo

To običajno zahteva nekaj končnih nastavitev za zagon Camunde. V Camundi obstajajo smernice, ki to zelo podrobno opisujejo, vendar se v tem članku ne bom spuščal vanje – navedel bom samo en primer: REST API distribucije ni privzeto konfiguriran za preverjanje pristnosti. Morda boste želeli to spremeniti.

Skratka-up

Kot lahko vidite, je zelo enostavno začeti uporabljati Camundo, ne glede na jezik, ki ga uporabljate. Ključna točka je, da vsa interakcija poteka prek API-ja REST. Tudi namestitev je precej enostavna, še posebej pri uporabi Dockerja.

Vir: www.habr.com

Dodaj komentar