Camunda izmantoÅ”ana vienkārÅ”ai orÄ·estrÄ“Å”anai, pamatojoties uz REST un Workflow Engine (bez Java)

Čau Habr! Piedāvāju jÅ«su uzmanÄ«bai raksta tulkojumu "Izmantojiet Camunda kā viegli lietojamu uz REST balstÄ«tu orÄ·estrÄ“Å”anas un darbplÅ«smas dzinēju (nepieskaroties Javai)" autors Bernds RÅ«kers.

07.07.2020., tulkojums Raksts Bernds Rukers

Camunda izmantoÅ”ana vienkārÅ”ai orÄ·estrÄ“Å”anai, pamatojoties uz REST un Workflow Engine (bez Java)

Es bieži apspriežu mikropakalpojumu arhitektÅ«ru ar cilvēkiem, kas nav Java: C# izstrādātāji, Node.JS/JavaScript izstrādātāji vai Golang cienÄ«tāji. Viņi visi saskaras ar faktu, ka viņiem ir nepiecieÅ”ams orÄ·estrÄ“Å”anas mehānisms mikropakalpojumu arhitektÅ«rā vai vienkārÅ”i rÄ«ks, lai racionalizētu darbplÅ«smu un iegÅ«tu iespēju pasÅ«tÄ«t, apstrādāt taimautus, Saga un kompensācijas darÄ«jumus.

BPM platforma ar atvērtais avots no Camunda lieliski piemērots Ŕādiem uzdevumiem. Izstrādātājam draudzÄ«gums ir viena no produkta galvenajām iezÄ«mēm. Bet, ja paskatās uz tā dokumentāciju, var rasties iespaids, ka Camundas "draudzÄ«gums" galvenokārt ir vērsts uz Java izstrādātājiem. Platforma nodroÅ”ina daudzas iespējas savu funkciju un paplaÅ”inājumu savienoÅ”anai, taču tas viss tiek darÄ«ts Java. Vai tieŔām?

Nē! Faktiski jÅ«s varat viegli palaist Camunda bez jebkādām Java zināŔanām un iestatÄ«t koda arhitektÅ«ru jebkurā jÅ«su izvēlētajā valodā. Å ajā rakstā mēs apskatÄ«sim:

  • pamata arhitektÅ«ra;
  • REST API
  • konsultācijas par esoÅ”ajām klientu bibliotēkām valodām, kas nav Java;
  • piemēram, izmantojot C# un Node.JS;
  • veidi, kā startēt Camunda serveri (Docker vai Tomcat).

Arhitektūra

Camunda ir rakstīta Java valodā, un tās darbībai ir nepiecieŔama Java virtuālā maŔīna (JVM). Camunda nodroŔina REST API, kas ļauj rakstīt jebkurā valodā, kas jums patīk, un izmantot REST ar Camunda:

Camunda izmantoÅ”ana vienkārÅ”ai orÄ·estrÄ“Å”anai, pamatojoties uz REST un Workflow Engine (bez Java)

Camunda darbplūsmas ir definētas BPMN, kas būtībā ir XML fails. To var modelēt ar Kamunda modelētāja.

Camundas palaiÅ”ana, izmantojot iepriekÅ” izveidotu Docker attēlu

VienkārŔākais veids, kā palaist Camunda, ir izmantot Docker. AlternatÄ«vi veidi, kā palaist Camunda, ir aprakstÄ«ti vēlāk Å”ajā rakstā.

Camunda izmantoÅ”ana vienkārÅ”ai orÄ·estrÄ“Å”anai, pamatojoties uz REST un Workflow Engine (bez Java)

Šajā gadījumā vienkārŔi palaidiet:

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

Jums nav jāuztraucas par Linux, JVM vai Tomcats. Dockerfaili un pamatdokumentācija (piemēram, instrukcijas pieslēgÅ”anai nepiecieÅ”amajām datu bāzēm) ir pieejamas vietnē GitHub.

Ja vēlaties palaist Camunda Enterprise Edition, varat to viegli mainīt Dockerfile.

Tomēr Camunda palaiÅ”anai ar Docker ir viens mÄ«nuss: jÅ«s iegÅ«sit Tomcat versiju, kurā ne vienmēr ir iekļauti jaunākie labojumi. Lai to novērstu, varat izveidot savu Docker attēlu, pamatojoties uz vēlamo Tomcat izplatÄ«Å”anu, kā parādÄ«ts Å”ajā piemērā, vai izmantot kādu no tālāk aprakstÄ«tajiem risinājumiem.

Procesa modeļa ievieŔana

ApskatÄ«sim piemēru, izmantojot Saga veidni klasiskai ceļojuma rezervÄ“Å”anai, kur vēlaties aktivizēt trÄ«s darbÄ«bas pēc kārtas un graciozi kompensēt veiksmÄ«gi pabeigtas darbÄ«bas vēlākas kļūmes gadÄ«jumā. Atveidots BPMN formā, tas izskatās Ŕādi:

Camunda izmantoÅ”ana vienkārÅ”ai orÄ·estrÄ“Å”anai, pamatojoties uz REST un Workflow Engine (bez Java)

Tagad jÅ«s varat izmantot REST API procesa modeļa izvietoÅ”anai. Pieņemsim, ka saglabājat to kā trip.bpmn un palaižat Camunda, izmantojot Docker, lai tas bÅ«tu pieejams vietnē 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

Tagad jūs varat skriet jauni darbplūsmas gadījumi izmantojot REST API un nododiet datus, kurus vēlaties redzēt kā darbplūsmas gadījumu mainīgos:

  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

Nākamais interesantais jautājums ir: kā Camunda izsauc tādas procedÅ«ras kā automaŔīnas rezervÄ“Å”ana? Camunda var ne tikai nekavējoties izsaukt pakalpojumus (Push-Principle), izmantojot kādu iebÅ«vētu savienotāji, bet arÄ« sakārtot darba priekÅ”metus tādā kā iebÅ«vētā kārtÄ«bā. Pēc tam darbinieks var atnest darba vienumus, izmantojot REST, veikt darbu un likt Camundai pabeigt (pievilkÅ”anas princips).

Camunda izmantoÅ”ana vienkārÅ”ai orÄ·estrÄ“Å”anai, pamatojoties uz REST un Workflow Engine (bez Java)

Tātad vispirms jums ir jāizpilda fetchAndLock (jo citi darbinieki vienlaikus var saņemt uzdevumus, lai palielinātu sistēmu):

  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

Tad pasaki to Kamundai strādnieks pabeidza darbu (Ņemiet vērā, ka jums jāievada ārējā uzdevuma ID, kas saņemts pirmajā pieprasījumā):

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

Tas arī viss - jums joprojām nav vajadzīga Java, vai ne? Un ar to pietiek, lai sāktu!

Klientu bibliotēkas

REST API izsaukÅ”ana ir vienkārÅ”a jebkurā programmÄ“Å”anas valodā. JavaScript to var ērti izdarÄ«t, izmantojot JQuery, un C#, izmantojot System.Net.Http un Newtonsoft.Json. Bet tas prasÄ«s laiku. Tātad jÅ«s varat vienkārÅ”i izmantot kādu klienta bibliotēku.

Šobrīd ir pieejamas vairākas gatavas klientu bibliotēkas:

  • JavaScript: saite. Atbalsta Camunda;
  • Java: saite. Atbalsta Camunda;
  • C #:saite Šø saite. Abi Å”ie projekti ir vidējā stāvoklÄ« un praktiski neaktivizējas, taču var kalpot kā labs sākumpunkts;
  • PHP: saite - nav pārāk pilnÄ«ga un neietver jaunākās API izmaiņas, bet es zinu projektus, kas to izmanto.

Klientu bibliotēkas, izņemot JavaScript un Java, nav paÅ”a Camunda produkta daļa. Negaidiet, ka tie atbalstÄ«s visas Camundas REST API funkcijas. Tas, ka bibliotēka nenodroÅ”ina noteiktu funkciju, nenozÄ«mē, ka tās nav, vienmēr pārbaudiet Camundas REST API. Atsauces projektos bibliotēkas tiek izmantotas kā sākumpunkts un veidne.

C# piemērs

Izmantojot iepriekÅ” minēto klienta bibliotēku, mēs varam vienkārÅ”i uzrakstÄ«t:

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

PilnÄ«bā strādājoÅ”u avota kodu var atrast tieÅ”saistē: saite. Vēl viens piemērs ir pieejams vietnē saite.

Piemērs ar 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();

PlaŔāku informāciju var atrast tÄ«mekļa vietnē github.com

Alternatīvi veidi, kā palaist Camunda

Pielāgots Docker attēls ar ā€œCamunda standalone WARā€

Kā alternatÄ«vu iepriekÅ” izveidotajam Camundas Docker attēlam varat pats sagatavot Tomcat (piemēram, pamatojoties uz oficiālajiem Docker Tomcat attēliem) un pēc tam kopēt tajā Camunda kā vienu no tā sauktajiem WAR failiem.

Camunda izmantoÅ”ana vienkārÅ”ai orÄ·estrÄ“Å”anai, pamatojoties uz REST un Workflow Engine (bez Java)

Ja jums ir daudz papildu prasÄ«bu un varat iestatÄ«t Java bÅ«vÄ“Å”anas vidi, varat arÄ« iestatÄ«t Camunda Standalone war. Iestatiet Maven bÅ«vējumu, kā parādÄ«ts Å”ajos piemēros: build Maven ar kara konfigurāciju vai montāža Maven ar pārklājumu.

Tiek sākta Camunda Tomcat izplatīŔana

Vēl viena iespēja ir vienkārÅ”i lejupielādēt Camunda Tomcat izplatÄ«Å”anu, izpakot to un palaist to. Tam nepiecieÅ”ama tikai jÅ«su datorā instalētā Java Runtime Environment (JRE). Tas var bÅ«t viegli lejupielādēt no Å”ejienes.

Camunda izmantoÅ”ana vienkārÅ”ai orÄ·estrÄ“Å”anai, pamatojoties uz REST un Workflow Engine (bez Java)

Lai mainÄ«tu datu bāzi vai darÄ«tu kaut ko citu, ir jākonfigurē Tomcat lÄ«dzÄ«gi aprakstÄ«ts dokumentācijā. Es zinu, ka Tomcat var izklausÄ«ties sarežģīti, bet patiesÄ«bā tas ir ļoti vienkārÅ”i. Un Google zina atbildes uz visu, kas var bÅ«t nepiecieÅ”ams Å”ajā procesā.

Camunda palaiŔana, izmantojot Tomcat

Pēdējā alternatÄ«va ir paÅ”am iestatÄ«t Tomcat un instalēt tajā Camunda, ievērojot uzstādÄ«Å”anas aprakstu. Tas dos jums iespēju izmantot vēlamo Tomcat versiju vai instalēt to, piemēram, kā Windows pakalpojumu.

Camunda ražoŔanas uzsākŔana

Lai palaistu Camunda, parasti bÅ«s nepiecieÅ”ama galÄ«gā iestatÄ«Å”ana. Camunda ir atrodamas vadlÄ«nijas, kas to apraksta ļoti detalizēti, taču Å”ajā rakstā es tajās neiedziļināŔos - nosaukÅ”u tikai vienu piemēru: izplatÄ«Å”anas REST API pēc noklusējuma nav konfigurēta autentifikācijai. Iespējams, vēlēsities to mainÄ«t.

Summējot-up

Kā redzat, ir ļoti viegli sākt darbu ar Camunda neatkarÄ«gi no izmantotās valodas. Galvenais ir tas, ka visa mijiedarbÄ«ba tiek veikta, izmantojot REST API. ArÄ« instalÄ“Å”ana ir diezgan vienkārÅ”a, it Ä«paÅ”i, ja izmantojat Docker.

Avots: www.habr.com

Pievieno komentāru