Camunda kasutamine REST-pÔhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on vÀga mugav.

Tere, Habr! Esitan teile artikli tĂ”lke «Kasutage Camundat kui lihtsat REST-pĂ”hist orkestreerimise ja töövoo mootorit (ilma Java-ga tegelemata)» autor Bernd RĂŒcker.

07.07.2020, tĂ”lge artikkel Bernd RĂŒcker

Camunda kasutamine REST-pÔhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on vÀga mugav.

KĂ€in sageli aruteludes mikroteenuste arhitektuuri ĂŒle inimestega, kes on kaugel Java-st: C#, Node.JS/JavaScript arendajatega vĂ”i Golangi pooldajatega. KĂ”ik nad seisavad silmitsi vajadusega orkestreerimise mehhanismi jĂ€rele mikroteenuste arhitektuuris vĂ”i lihtsalt töövoo optimeerimise ja vĂ”imalusega ĂŒhtlustada, hallata aega, teha Saga ja kompenseerivaid tehinguid.

Camunda avatud lĂ€htekoodiga BPM-plaatvorm sobib selliste ĂŒlesannete jaoks suurepĂ€raselt. ArendajasĂ”bralikkus on toote ĂŒks peamisi omadusi. Kuid kui vaadata selle dokumentatsiooni, vĂ”ib jÀÀda mulje, et Camunda «arendajasĂ”bralikkus» on suunatud peamiselt Java arendajatele. Platvorm pakub palju vĂ”imalusi oma funktsioonide ja laienduste ĂŒhendamiseks, kuid kĂ”ik see toimub Java-s. Kas see tĂ”epoolest on nii? sobib suurepĂ€raselt selliste ĂŒlesannete jaoks. Arendaja sĂ”bralikkus on toote ĂŒks peamisi jooni. Kuid kui vaadata selle dokumentatsiooni, vĂ”ib jÀÀda mulje, et Camunda sĂ”bralikkus on peamiselt suunatud Java arendajatele. Platvorm pakub mitmeid vĂ”imalusi oma funktsioonide ja lisandite ĂŒhendamiseks, kuid kĂ”ik see tehakse Java keeles. Kas see on tĂ”esti nii?

Ei! Tegelikult on Camunda lihtne kÀivitada ilma Java teadmisi omamata ning arhitektuuri seadistada mistahes keeles, mida soovite. Selles artiklis kÀsitleme:

  • pĂ”hiarhitektuuri;
  • REST API-d;
  • nĂ€punĂ€iteid olemasolevate klienditeekondade kohta, mis erinevad Java-st;
  • C# ja Node.JS kasutamise nĂ€idet;
  • Camunda serveri kĂ€ivitamise viise (Docker vĂ”i Tomcat).

Architecture

Camunda on kirjutatud Java-s ja vajab kÀivitamiseks Java virtuaalmasinat (JVM). Camunda pakub REST API-d, mis vÔimaldab teil kirjutada mistahes keeles, mis teile meeldib, ja kasutada Camundat REST-iga:

Camunda kasutamine REST-pÔhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on vÀga mugav.

Camundas mÀÀratakse töövood BPMN-is, mis pÔhineb pÔhimÔtteliselt XML-failil. Seda saab modelleerida abiga Camunda Modeler.

Camunda kÀitamine eelnevalt loodud Docker'i pildiga

Lihtsaim viis Camunda kÀitamiseks on kasutada Dockerit. Camunda kÀitamise alternatiivsed viisid on allpool selles artiklis kirjeldatud.

Camunda kasutamine REST-pÔhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on vÀga mugav.

Sel juhul on lihtsalt vajalik kÀivitada:

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

Te ei pea muretsema Linuxi, Java virtuaalmasinate vĂ”i Tomcatide pĂ€rast. Dockerfile'id ja pĂ”hiteave (nĂ€iteks juhendid vajalike andmebaasidega ĂŒhendamiseks) on saadaval Github.

Kui soovite Camunda Enterprise Editionit kÀivitada, saate seda hÔlpsasti muuta Dockerfile.

Kuid Camunda kĂ€itamine Dockeris toob kaasa ĂŒhe puuduse: saate Tomcat'i versiooni, mis ei pruugi alati sisaldada viimaseid parandusi. Selle ĂŒmberkĂ€imiseks vĂ”ite luua oma Docker-pildi sobiva Tomcat'i jaotuse pĂ”hjal, nagu on nĂ€idatud jĂ€rgmises nĂ€ites, vĂ”i kasutada ĂŒht allpool kirjeldatud lahendust.

Protsessimudeli juurutamine

Vaatame nÀidet, kasutades Saga ƥablooni klassikalise reisibroneeringu jaoks, kus soovite kolm tegevust jÀrjest kutsuda ja korrektselt kompenseerida edukalt sooritatud tegevusi hilisema tÔrke korral. BPMN kujul nÀeb see vÀlja jÀrgmine:

Camunda kasutamine REST-pÔhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on vÀga mugav.

NĂŒĂŒd saate kasutada REST API protsessimudeli juurutamiseks. Oletame, et olete selle salvestanud nimega trip.bpmn ja kĂ€ivitanud Camunda Dockeris, et see oleks saadaval 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 uus töövoo eksemplar REST API abil ja edastades andmeid, mida soovite töövoo instantsi muutujatena nĂ€ha:

  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 vĂ€lja protseduure, nagu auto broneerimine? Camunda suudab mitte ainult kohe vĂ€ljakutsuda teenuseid (Push-Principle), kasutades mĂ”ningaid sisseehitatud konnekoreid, vaid ka paigutada tööelemente omamoodi sisseehitatud jĂ€rjekorda. PĂ€rast seda vĂ”ib töötaja saada tööelemente REST kaudu, tööd teha ja teavitada Camundat lĂ”petamisest (Pull-Principle).

Camunda kasutamine REST-pÔhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on vÀga mugav.

Esiteks peate teostama fetchAndLock sest teised töötajad vĂ”ivad ĂŒlesandeid samaaegselt saada, et sĂŒsteemi skaleerida:

  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 töötaja on lÔpetanud töö (pange tÀhele, et peate sisestama esimese pÀringu kÀigus saadud external task'i identifikaatori):

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

Ja kĂ”ik on valmis — teil ei ole veel vaja mingit Java, eks? Ja see on piisav, et alustamiseks!

Kliendiraamatukogud

REST API kutsumine on lihtne igas programmeerimiskeeles. JavaScriptis on selleks mugav kasutada JQuery’t, ja C#-s tuleb kasutada System.Net.Http ja Newtonsoft.Json. Kuid selleks kulub aega. SeetĂ”ttu vĂ”ite lihtsalt kasutada mĂ”nda kliendiraamatukogu.

Praegu on saadaval mitu valmis kliendiraamatukogu:

  • JavaScript: link. Camunda on toetatud;
  • Java: link. Camunda on toetatud;
  • C#:link ja link. Need projektid on mĂ”lemad vahepealses seisundis ja peaaegu kasutamata, kuid vĂ”ivad olla head alguspunktid;
  • PHP: link — see on mitte liiga tĂ€ielik ja ei sisalda viimaseid API muudatusi, kuid ma tean projekte, mis seda kasutavad.

VĂ€lja arvatud JavaScript ja Java, ei kuulu klienditeegid Camunda toote hulka. Ära oota, et need toetavad kĂ”iki Camunda REST API vĂ”imalusi. Kui teek ei paku teatud funktsiooni, ei tĂ€henda see, et seda seal ei ole, alati kontrolli Camunda REST API-d. TĂŒĂŒpilised projektid kasutavad teeke lĂ€htepunktina ja ĆĄabloonina.

C# nÀide

Kasutades eespool mainitud klienditeeki, saame lihtsalt kirjutada:

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  // Laadi BPMN XML fail ressurssidelt
  camunda.RepositoryService.Deploy("trip-booking", new List {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Registreeri töötajad
  registerWorker("reserve-car", externalTask => {
    // siin saad tÔeliselt tegutseda! NÀiteks sysout :-)
    Console.WriteLine("Autosid broneeritakse nĂŒĂŒd...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Autosid tĂŒhistatakse nĂŒĂŒd...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Hotelli broneeritakse nĂŒĂŒd...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Registreeri rohkem töötajaid...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary()
    {
      {"someBookingData", "..." }
    });

Terve töölehtede kood 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 + " - lisatud midagi";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

Rohkem teavet on saadaval veebilehelt github.com

Alternatiivsed viisid Camunda kÀivitamiseks

Kohandatud Docker pilt 'Camunda standalone WAR' jaoks

Alternatiividena valmis Docker pildile Camunda, saate ise valmistada Tomcat (nĂ€iteks pĂ”hinedes ametlikele Docker Tomcat piltidele) ja seejĂ€rel kopeerida Camunda sinna ĂŒhe nii nimetatud WAR-failina.

Camunda kasutamine REST-pÔhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on vÀga mugav.

Kui teil on palju lisanÔudeid ja suudate seadistada Java ehituskeskkonda, saate ka seadistada Camunda Standalone war. Seadistage Maven ehitus nagu nende nÀidiste puhul: ehitus Maven WAR konfiguratsiooniga vÔi ehitus Maven Overlay'iga.

Camunda Tomcat'i jaotuse kÀivitamine

Veel ĂŒks vĂ”imalus on lihtsalt alla laadida Camunda Tomcat'i jaotus, dekompressida see ja kĂ€ivitada. Selleks on vajalik ainult Java Runtime Environment (JRE), mis on teie arvutisse installitud. Selle saab kergesti alla laadida siit.

Camunda kasutamine REST-pÔhise orkestreerimise ja töövoo mootori jaoks (ilma Java-ta) on vÀga mugav.

Andmebaasi muutmiseks vÔi muude muudatuste tegemiseks peate seadistama Tomcati, nagu on dokumentatsioonis kirjeldatud. Ma tean, et Tomcat vÔib tunduda keeruline, kuid tegelikult on see vÀga lihtne. Ja Google teab vastuseid kÔigile, mis vÔib protsessis vajalikuks osutuda.

Camunda kÀivitamine Tomcat'i abil

Viimane alternatiiv on seadistada Tomcat ja installida Camunda ise, jÀrgides paigaldusjuhiseid. See vÔimaldab kasutada igat Tomcati versiooni, mida eelistate, vÔi nÀiteks installida selle Windowsi teenusena.

Camunda kÀivitamine tootmises

Tavaliselt on vajalik teha mĂ”ningaid lĂ”ppviimistlusi Camunda kĂ€ivitamiseks. Camundal on soovitusi, mis seda vĂ€ga ĂŒksikasjalikult kirjeldavad, kuid ma ei puutu sellesse artiklis — mainin vaid ĂŒhte nĂ€idet: vaike REST API ei ole seadistatud autentimisteenuse jaoks. VĂ”ib-olla soovite seda muuta.

KokkuvÔte

Kuidas te vĂ”isite mĂ€rgata, on Camundaga alustamine vĂ€ga lihtne, sĂ”ltumata kasutatavast keelest. Peamine punkt on see, et kogu suhtlus toimub REST API kaudu. Paigaldamine on samuti ĂŒsna lihtne, eriti Dockerit kasutades.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster