Camunda kasutamine REST ja Workflow Engine'i lihtsaks orkestreerimiseks (ilma Javata)

Tere, Habr! Esitlen teile tõlget artiklist «Kasutage Camundat lihtsaks REST-põhiseks orkestreerimiseks ja töökäigusüsteemiks (ilma Javaga kokkupuudeteta)» autor Bernd Rücker.

07.07.2020, tõlge artikleid Bernd Rücker

Camunda kasutamine REST ja Workflow Engine'i lihtsaks orkestreerimiseks (ilma Javata)

Kofti arutan sageli mikroteenuste arhitektuuri inimestega, kes on kaugel Javast: C# arendajatega, Node.JS/JavaScriptiga või Golangiga. Kõik nad seisavad silmitsi vajadusega orkestreerimise mehhanismi järele mikroteenuste arhitektuuris või lihtsalt töövoo optimeerimise tööriistale, mis loob võimaluse järjestamiseks, ajastamiseks, Saga ja kompensatsioonitehinguteks.

BPM-platvorm, mille avatud lähtekood on Camundal sobib selliste ülesannete jaoks suurepäraselt. Arendajale sõbralikkus on toote üks peamisi omadusi. Kuid kui vaadata selle dokumentatsiooni, võib jääda mulje, et Camunda «sõbralikkus» on suunatud peamiselt Java arendajatele. Platvorm pakub palju võimalusi oma funktsioonide ja laienduste integreerimiseks, kuid kõik see toimub Java-s. Kas see on tõesti nii?

Ei! Tegelikult saab Camundat hõlpsasti käivitada ilma Java-teadmisteta ja seadistada arhitektuuri, mis sobib valdavalt teie valitud keele koodiga. Selles artiklis käsitleme:

  • põhiarhitektuuri;
  • REST API;
  • nõuandeid olemasolevate klienditeekide kohta, mis ei ole Java;
  • näide C# ja Node.JS kasutamisest;
  • Camunda serveri käivitamise meetodid (Docker või Tomcat).

Arhitektuur

Camunda on kirjutatud Java-s ja selle käitamiseks on vajalik Java virtuaalmasin (JVM). Camunda pakub REST API-d, mis võimaldab teil kirjutada igas keeles, mis teile meeldib, ja kasutada REST-i Camundaga:

Camunda kasutamine REST ja Workflow Engine'i lihtsaks orkestreerimiseks (ilma Javata)

Camunda töövood on määratletud BPMN-is, mis on sisuliselt XML-fail. Selle saab modelleerida Camunda Modeleriga.

Camunda käivitamine eelnevalt loodud Docker pildist

Lihtsaim viis Camunda käivitamiseks on kasutada Dockerit. Alternatiivsed Camunda käivitamise meetodid on kirjeldatud selle artikli hilisemates osades.

Camunda kasutamine REST ja Workflow Engine'i lihtsaks orkestreerimiseks (ilma Javata)

Sel juhul on piisav lihtsalt käivitada:

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

Te ei pea muretsema Linuxi, Java virtuaalmasinate või Tomcat'i pärast. Dockerfile'id ja põhidokumendid (nt instruktsioonid andmebaasidega ühendamiseks) on saadaval Github.

Kui soovite käivitada Camunda Enterprise Editioni, saate seda hõlpsasti muuta Dockerfile.

Kuid Camunda käivitamisel Dockeriga on üks puudus: saate Tomcat'i versiooni, mis ei pruugi alati sisaldada viimaseid parandusi. Selle ületamiseks võite ise luua Docker'i pildi soovitud Tomcat'i distributsiooni põhjal, nagu näidatud allolevas näites, või kasutada mõnda lahendust, mida allpool kirjeldatakse.

Protsessi mudeli juurutamine

Vaatame näidet, kasutades Saga malli traditsioonilise reisi broneerimise jaoks, kus soovite järjestikku käivitada kolme toimingut ja õigesti kompenseerida edukalt lõpule viidud toimingud hilisema tõrke korral. BPMN vormis näeb see välja järgmiselt:

Camunda kasutamine REST ja Workflow Engine'i lihtsaks orkestreerimiseks (ilma Javata)

Nüüd saate kasutada REST API-d protsessi mudeli juurutamiseks. Oletame, et olete selle salvestanud nimega trip.bpmn ja käivitanud Camunda Dockeris, et see oleks saadaval aadressil localhost: 8080:

  curl -w "n" 
-H "Accept: application/json" 
-F "deployment-name=trip" 
-F "enable-duplicate-filtering=true" 
-F "deploy-changed-only=true" 
-F "trip.bpmn=@trip.bpmn" 
http://localhost:8080/engine-rest/deployment/create

Nüüd saate käivitada uusid töövoogude eksemplare REST API kaudu ja edastada andmed, mida soovite näha töövoo eksemplari muutujatena:

  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

Järgmine huvitav küsimus: kuidas Camunda kutsub protseduure, näiteks auto broneerimist? Camunda suudab mitte ainult kohe kutsuda teenuseid (Push-Princippi), kasutades mõningaid sisseehitatud konektoreid, vaid ka asetada tööelemendid oma sisseehitatud järjekorda. Pärast seda saab worker töötlemise elemendid RESTi kaudu kätte, täita töö ja teavitada Camundat lõpetamisest (Pull-Principle).

Camunda kasutamine REST ja Workflow Engine'i lihtsaks orkestreerimiseks (ilma Javata)

Seega peate esmalt täitma fetchAndLock kuna teised workerid võivad ülesandeid samaaegselt kätte saada süsteemi skaleerimiseks:

  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

Seejärel teavitage Camundat, et worker on töö lõpetanud (pange tähele, et peate sisestama esimese päringu käigus saadud välise ülesande identifikaatori):

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

Nüüd on kõik — te ei ole ikka veel vajanud Java't, eks? Ja sellest piisab, et alustada!

Kliendiraamatukogud

REST API-d on lihtne kutsuda mistahes programmeerimiskeeles. JavaScriptis on seda mugav teha JQuery abil, C#-is tuleb kasutada System.Net.Http ja Newtonsoft.Json. Ent see nõuab aega. Seetõttu võite lihtsalt kasutada mõnda kliendiraamatukogu.

Praeguseks on saadaval mitu valmis kliendiraamatukogu:

  • JavaScript: link. Toetab Camundat;
  • Java: link. Toetab Camundat;
  • C#:link ja link. Need projektid on mõlemad vahepealses seisus ja praktiliselt mitteaktiivsed, kuid võivad olla headeks lähtepunktideks;
  • PHP: link — mitte liiga täielik ja mitte kõikide API muudatustega kaasas olev raamatukogu, kuid ma tean projekte, mis seda kasutavad.

Väljaspool JavaScripti ja Java't ei ole kliendiraamatukogud osa Camunda toote enda küljest. Ärge oodake, et need toetavad kõiki Camunda REST API funktsioone. Kui raamatukogu ei paku teatud funktsiooni, ei tähenda see, et seda seal ei oleks, alati kontrollige Camunda REST API-d. Tüüpilised projektid kasutavad raamatukogusid lähtepunktina ja mallina.

C# näide

Kasutades ülaltoodud kliendiraamatukogu, saame lihtsalt kirjutada:

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  // Lae BPMN XML fail ressurssidest
  camunda.RepositoryService.Deploy("trip-booking", new List {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Registreeri töötajad
  registerWorker("reserve-car", externalTask => {
    // siin saate teha tõelisi asju! Nagu sysout :-)
    Console.WriteLine("Külastuse auto broneerimine...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Auto tühistamine...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Hotelli broneerimine...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Registreeri rohkem töötajaid...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary()
    {
      {"someBookingData", "..." }
    });

Täielikult töötav lähtekood on Internetis saadaval: link. Teine näide on saadaval aadressil link.

Пример с 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();

Lisainfo leiate veebilehelt github.com

Alternatiivsed viisid Camunda käivitamiseks

Kohandatud Docker'i pilt 'Camunda standalone WAR'iga

Alternatiivina Camunda valmis Docker'i pildile võite ise seadistada Tomcati (näiteks põhinedes ametlikel Tomcati Docker'i piltidel) ja seejärel kopeerida sinna Camunda ühe nii nimetatud WAR-failina.

Camunda kasutamine REST ja Workflow Engine'i lihtsaks orkestreerimiseks (ilma Javata)

Kui teil on palju täiendavaid nõudeid ja te suudate Java koostamiskeskkonda seadistada, saate ka Camunda Standalone WAR-i seadistada. Seadistage Maven'i koostamine järgides neid näiteid: koostamine Maven'i WAR konfiguratsiooniga või koostamine Maven'i Overlay'iga.

Camunda Tomcati jaotuse käivitamine

Veel üks variant on lihtsalt alla laadida Camunda Tomcati jaotust, dekompresseerida see ja käivitada. Selleks on vajalik ainult Java Runtime Environment (JRE), mis on teie arvutisse installitud. Seda saab hõlpsasti alla laadida siit.

Camunda kasutamine REST ja Workflow Engine'i lihtsaks orkestreerimiseks (ilma Javata)

Andmebaasi muutmiseks või millegi muu tegemiseks peate Tomcati seadistama, nagu on kirjeldatud dokumentatsioonis. Tean, et Tomcat võib tunduda keeruline, kuid tegelikult on see väga lihtne. Ja Google teab vastuseid kõikidele küsimustele, mis võivad protsessi käigus tekkida.

Camunda käivitamine Tomcati abil

Viimane alternatiiv on ise seadistada Tomcat ja paigaldada sinna Camunda, järgides paigaldusjuhendit. See annab võimaluse kasutada igasuguseid Tomcat'i versioone, mida soovite, või paigaldada selle näiteks Windows'i teenusena.

Camunda käivitamine tootmises

Tavaliselt on see nõudnud mõningate lõppseadistuste tegemist Camunda käivitamiseks. Camundal on soovitusi, mis seda väga üksikasjalikult kirjeldavad, kuid ma ei puuduta neid selles artiklis — mainin vaid üht näidet: jaotuse REST API ei ole vaikimisi autentimiseks seadistatud. Võib-olla soovite seda muuta.

Kokkuvõte

Kuidas te võisite tähele panna, on Camundaga alustamine väga lihtne, olenemata kasutatavast keelest. Peamine punkt on see, et kogu suhtlemine toimub REST API kaudu. Paigaldamine on samuti üsna lihtne, eriti Docker'i kasutamisel.

Allikas: habr.com

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster