Përdorimi i Camunda për orkestrimin e thjeshtë të bazuar në REST dhe Workflow Engine (pa Java)

PĂ«rshĂ«ndetje, Habr! Po ju prezantoj njĂ« pĂ«rkthim tĂ« artikullit «PĂ«rdorni Camunda si njĂ« motor orchestration dhe workflow tĂ« lehtĂ« pĂ«r t'u pĂ«rdorur, tĂ« bazuar nĂ« REST (pa prekur Java)» autori Bernd RĂŒcker.

07.07.2020, pĂ«rkthim artikulli Bernd RĂŒcker

Përdorimi i Camunda për orkestrimin e thjeshtë të bazuar në REST dhe Workflow Engine (pa Java)

Shpesh diskutoj për arkitekturën mikroshërbimore me njerëz që janë të huaj për Java: zhvillues C#, Node.JS/JavaScript ose përkrahës të Golang. Të gjithë ata përballen me nevojën për një mekanizëm orkestrimi në arkitekturën mikroshërbimore, ose thjesht një mjet për optimizimin e procesit të punës dhe për të marrë mundësinë për renditje, trajtim të kohëve të pritjes, Saga dhe transaksione kompensuese.

Platforma BPM me kode të hapur nga Camunda përshtatet shkëlqyer për këto qëllime. Mirëpritja ndaj zhvilluesit është një nga karakteristikat kyçe të produktit. Por nëse shikoni dokumentacionin e tij, mund të krijoni përshtypjen se 'mirëpritja' e Camunda është kryesisht e orientuar ndaj zhvilluesve Java. Platforma ofron mundësi të shumta për lidhjen e funksioneve dhe zgjerimeve të veta, por e gjithë kjo bëhet në Java. A është kështu në të vërtetë?

Jo! Në të vërtetë, mund ta filloni lehtësisht Camunda pa asnjë njohuri në Java dhe të konfiguroni arkitekturën për kodin në çdo gjuhë që dëshironi. Në këtë artikull do të shqyrtojmë:

  • arkitekturĂ«n bazĂ«;
  • REST API;
  • kĂ«shilla pĂ«r bibliotekat ekzistuese tĂ« klientĂ«ve pĂ«r gjuhĂ« tĂ« tjera pĂ«rveç Java;
  • shembuj tĂ« pĂ«rdorimit tĂ« C# dhe Node.JS;
  • metoda pĂ«r tĂ« nisur serverin Camunda (Docker ose Tomcat).

Arkitektura

Camunda është shkruar në Java dhe për të nisur nevojitet një makinë virtuale Java (JVM). Camunda ofron një REST API që ju lejon të shkruani në çdo gjuhë që ju pëlqen dhe të përdorni REST me Camunda:

Përdorimi i Camunda për orkestrimin e thjeshtë të bazuar në REST dhe Workflow Engine (pa Java)

Proceset në Camunda përcaktohen në BPMN, i cili kryesisht është një skedar XML. Ai mund të modelohet me Camunda Modeler.

Nisja e Camunda përmes një imazhi të krijuar më parë në Docker

Mënyra më e thjeshtë për të nisur Camunda është të përdorni Docker. Mënyrat alternative për të nisur Camunda janë përshkruar më poshtë në këtë artikull.

Përdorimi i Camunda për orkestrimin e thjeshtë të bazuar në REST dhe Workflow Engine (pa Java)

Në këtë rast, mjafton të nisni:

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

Nuk keni nevojë të shqetësoheni për Linux, makinat virtuale Java ose Tomcat. Dockerfiles dhe dokumentacioni themelor (për shembull, udhëzimi për lidhjen me bazat e dhënash të nevojshme) janë të disponueshme në Github.

Nëse dëshoni të nisni Camunda Enterprise Edition, mund ta ndryshoni lehtësisht Dockerfile.

Megjithatë, ka një disavantazh në përdorimin e Camunda me Docker: do të merrni një version të Tomcat që nuk përfshin gjithmonë riparimet më të fundit. Për ta anashkaluar këtë, mund të krijoni vetë një imazh Docker që bazohet në shpërndarjen e dëshiruar të Tomcat, siç tregohet në këtë shembull, ose mund të përdorni një nga zgjidhjet e përshkruara më poshtë.

Zhvillimi i modelit të procesit

Le të marrim një shembull duke përdorur modelin Saga për rezervimin klasik të udhëtimeve, ku dëshironi të thërrisni tre veprime njëri pas tjetrit dhe të kompensoni veprimet e kryera me sukses në rast të një dështimi të mëvonshëm. Prezentuar në formën BPMN, ai duket si më poshtë:

Përdorimi i Camunda për orkestrimin e thjeshtë të bazuar në REST dhe Workflow Engine (pa Java)

Tani mund të përdorni REST API për zhvillimin e modelit të procesit. Supozoni se e keni ruajtur atë me emrin trip.bpmn dhe keni aktivizuar Camunda përmes Docker, që të jetë i aksesueshëm në 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/creat

Tani mund të aktivizoni instancat e reja të procesit përmes REST API dhe të dërgoni të dhënat që dëshironi të shihni si variabla të instancës së procesit:

  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

Një pyetje tjetër interesante është: si i thërret Camunda procedurat, si rezervimi i një makine? Camunda mund të thërrasë shërbime menjëherë (Parimi Push), duke përdorur disa konnektorë, por gjithashtu mund të vendosë elementet e punës në një farë rendi të integruar. Pas kësaj, punonjësi mund të marrë elementet e punës përmes REST, të kryejë detyrën dhe t'i raportojë Camunda për përfundimin (Parimi Pull).

Përdorimi i Camunda për orkestrimin e thjeshtë të bazuar në REST dhe Workflow Engine (pa Java)

Pra, së pari ju nevojitet të realizoni fetchAndLock (duke qenë se punonjësit e tjerë mund të marrin detyra njëkohësisht për të shkallzuar sistemin):

  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

Pasi, informoni Camunda se punonjësi përfundoi punën (mbani mend se duhet të jepni identifikuesin e detyrës externe, të marrë nga kërkesa e parë):

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

KĂ«tu e keni — akoma nuk ju nevojitet Java, apo jo? Mjafton pĂ«r tĂ« filluar!

Biblioteka të klientëve

Thjesht të thirrni REST API në çdo gjuhë programuese. Në JavaScript, kjo është e lehtë për t'u bërë me JQuery, ndërsa në C# duhet të përdorni System.Net.Http dhe Newtonsoft.Json. Por do të duhen disa kohë. Prandaj, mund të thjesht përdorni ndonjë bibliotekë klienti.

Aktualisht janë të disponueshme disa biblioteka klienti të gatshme:

  • JavaScript: link. Camunda mbĂ«shtetet;
  • Java: link. Camunda mbĂ«shtetet;
  • C#:link dhe link. TĂ« dy kĂ«to projekte janĂ« nĂ« njĂ« gjendje ndĂ«rmjetĂ«se dhe pothuajse nĂ« pa veprim, por mund tĂ« shĂ«rbejnĂ« si njĂ« pikĂ« e mirĂ« fillimi;
  • PHP: link — njĂ« bibliotekĂ« qĂ« nuk Ă«shtĂ« shumĂ« e plotĂ« dhe nuk pĂ«rfshin ndryshimet mĂ« tĂ« fundit tĂ« API, por unĂ« njoh projekte qĂ« e pĂ«rdorin atĂ«.

Përveç JavaScript dhe Java, bibliotekat klienti nuk janë pjesë e vetë produktit Camunda. Mos prisni që ato të mbështesin të gjitha funksionalitetet e REST API Camunda. Nëse një bibliotekë nuk ofron një funksion të caktuar, kjo nuk do të thotë që nuk e ka, gjithmonë kontrolloni REST API Camunda. Projektet standarde i përdorin bibliotekat si një pikë fillimi dhe model.

Shembulli me C#

Duke përdorur bibliotekën e klientit të përmendur më lart, mund të shkruajmë thjesht:

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  // Përdorni skedarin BPMN XML nga burimet
  camunda.RepositoryService.Deploy("trip-booking", new List {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Regjistro punonjësit
  registerWorker("reserve-car", externalTask => {
    // këtu mund të bëni punën reale! Si një sysout :-)
    Console.WriteLine("Rezervimi i makinës tani...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Anullimi i makinës tani...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Rezervimi i hotelit tani...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Regjistro më shumë punonjës...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary()
    {
      {"someBookingData", "..." }
    });

Kodi burimor tërësisht funksional mund të gjendet në Internet: link. Një shembull tjetër është në adresën 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 + " - shtuar diçka";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

Më shumë informacion mund të gjeni në sit github.com

Mënyra alternative për të nisur Camunda

Imazhi i përdoruesit Docker me "Camunda standalone WAR"

Si alternativë për imazhin e gatshëm Docker nga Camunda, mund të përgatitni vetë Tomcat (p.sh., në bazë të imazheve zyrtare Docker Tomcat) dhe pastaj të kopjoni Camunda si njërin nga ato që quhen skedarë WAR.

Përdorimi i Camunda për orkestrimin e thjeshtë të bazuar në REST dhe Workflow Engine (pa Java)

Nëse keni shumë kërkesa shtesë dhe mund ta konfiguroni ambientin e ndërtimit Java, gjithashtu mund ta konfiguroni Camunda Standalone WAR. Konfiguroni ndërtimin Maven si në këto shembuj: ndërtim Maven me konfigurimin war ose ndërtim Maven me Overlay.

Nisja e shpërndarjes Camunda Tomcat

Një tjetër opsion është thjesht të shkarkoni shpërndarjen Camunda Tomcat, ta shpaketoni dhe ta nisni. Për këtë, do t'ju duhet vetëm Java Runtime Environment (JRE), e instaluar në kompjuterin tuaj. E shkarkoni lehtësisht këtu.

Përdorimi i Camunda për orkestrimin e thjeshtë të bazuar në REST dhe Workflow Engine (pa Java)

Për të ndryshuar bazën e të dhënave ose për të bërë diçka tjetër, duhet ta konfiguroni Tomcat, siç është përshkruar në dokumentacion. E di se Tomcat mund të duket i komplikuar, por në të vërtetë është shumë e thjeshtë. Dhe Google e di përgjigjen për gjithçka që mund të nevojitet gjatë procesit.

Nisja e Camunda duke përdorur Tomcat

Alternativa e fundit është ta konfiguroni vetë Tomcat dhe ta instaloni Camunda , duke ndjekur përshkrimin e instalimit. Kjo do t'ju japë mundësinë të përdorni çdo version të Tomcat, që preferoni, ose, për shembull, ta instaloni si një shërbim Windows.

Nisja e Camunda në prodhim

Si rregull, pĂ«r kĂ«tĂ« do tĂ« jetĂ« e nevojshme tĂ« kryhen disa konfigurime pĂ«rfundimtare pĂ«r tĂ« nisur Camunda. NĂ« Camunda ka rekomandime, qĂ« e pĂ«rshkruajnĂ« kĂ«tĂ« shumĂ« hollĂ«sisht, por nuk do tĂ« prekem nĂ« to nĂ« kĂ«tĂ« artikull — do tĂ« pĂ«rmend vetĂ«m njĂ« shembull: REST API i shpĂ«rndarjes nga e drejta nuk Ă«shtĂ« i konfiguruar pĂ«r tĂ« verifikuar autentikimin. Mund tĂ« dĂ«shironi ta ndryshoni kĂ«tĂ«.

Përmbledhja e rezultateve

Siç keni vënë re, të filloni të punoni me Camunda është shumë e thjeshtë, pavarësisht nga gjuha që përdorni. Pika kyçe është se të gjitha ndërveprimet bëhen përmes REST API. Instalimi është gjithashtu mjaft i thjeshtë, sidomos kur përdorni Docker.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster