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 hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster