Përdorimi i Camunda për orkestrimin e lehtë të bazuar në REST dhe Motorin e Punës (pa Java)

PĂ«rshĂ«ndetje, Habr! Ju prezantoj pĂ«rkthimin e artikullit «PĂ«rdorni Camunda si njĂ« motor orkestrimi dhe fluksi pune tĂ« lehtĂ« pĂ«r t'u pĂ«rdorur, tĂ« bazuar nĂ« REST (pa prekur Java)» autori Bernd RĂŒcker.

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

Përdorimi i Camunda për orkestrimin e lehtë të bazuar në REST dhe Motorin e Punës (pa Java)

Unë shpesh diskutoj mbi arkitekturën mikroshërbimore me njerëz që janë larg 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 flukseve të punës dhe për të siguruar mundësinë e renditjes, trajtimit të kohëve të skadimit, Saga dhe transaksioneve kompensuese.

Platforma BPM me kod burimor të hapur nga Camunda është shumë e përshtatshme për këto detyra. Miqësia ndaj zhvilluesve është një nga karakteristikat kyçe të produktit. Por nëse e shqyrtoni dokumentacionin e saj, mund të krijohet përshtypja se «miqësia» e Camunda është kryesisht e orientuar ndaj zhvilluesve Java. Platforma ofron shumë mundësi për të lidhur funksione dhe zgjerime të veta, por të gjitha këto bëhen në Java. A është vërtet kështu?

Jo! Në të vërtetë, mund ta lançoni Camunda lehtësisht pa ndonjë njohuri për Java dhe të konfiguroni arkitekturën për kodin në çdo gjuhë që zgjidhni. 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 veçanĂ«risht pĂ«rveç Java;
  • shembuj pĂ«rdorimi pĂ«r C# dhe Node.JS;
  • nĂ« metodat pĂ«r tĂ« nisur serverin Camunda (Docker ose Tomcat).

Arkitektura

Camunda është e shkruar në Java dhe i nevojitet një makinë virtuale Java (JVM) për të funksionuar. Camunda ofron një REST API, që ju lejon të shkruani në çdo gjuhë që dëshironi dhe ta përdorni REST me Camunda:

Përdorimi i Camunda për orkestrimin e lehtë të bazuar në REST dhe Motorin e Punës (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 Docker të krijuar paraprakisht

Mënyra më e lehtë për të nisur Camunda është të përdorni Docker. Mënyra alternativa për të nisur Camunda përshkruhen më tej në këtë artikull.

Përdorimi i Camunda për orkestrimin e lehtë të bazuar në REST dhe Motorin e Punës (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 Tomcats. Dockerfiles dhe dokumentacioni kryesor (p.sh., udhëzimi për lidhjen me bazat e të dhënave të nevojshme) janë të disponueshme në Github.

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

Megjithatë, ka një mangësi në ekzekutimin e Camunda me Docker: do të merrni një version të Tomcat, i cili nuk përfshin gjithmonë korrigjimet më të fundit. Për ta anashkaluar këtë, mund të krijoni vetë një imazh Docker bazuar në distro-in e dëshiruar të Tomcat, siç tregohet në këtë shembull, ose të përdorni një nga zgjidhjet e përshkruara më poshtë.

Zhvillimi i modelit të procesit

Le të shqyrtojmë një shembull, duke përdorur modelin Saga për rezervimin klasik të udhëtimeve, ku dëshironi të thërrisni tri veprime radhazi dhe të kompensoni në mënyrë korrekte veprimet e kryera me sukses në rast të një dështimi më vonë. I paraqitur në formën BPMN, ai duket si më poshtë:

Përdorimi i Camunda për orkestrimin e lehtë të bazuar në REST dhe Motorin e Punës (pa Java)

Tani mund të përdorni REST API për zhvillimin e modelit të procesit. Le të supozojmë se e keni ruajtur me emrin trip.bpmn dhe e keni ekzekutuar Camunda përmes Docker-it, në mënyrë që të jetë e aksesueshme 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/create

Tani mund të filloni instance të reja të procesit duke me REST API dhe dërgoni të dhënat që dëshironi të shihni si variabël 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

Pyetja tjetër interesante: si e thirr Camunda procedurat si rezervimi i makinave? Camunda mund të thërrasë shërbime menjëherë (Parimi Push), duke përdorur disa konnektorë, por gjithashtu vendos elementet e punës në një lloj renditje të integruar. Pas kësaj, punëtori mund të marrë elementët e punës përmes REST, të kryejë punën dhe t'i raportojë Camunda për përfundimin (Parimi Pull).

Përdorimi i Camunda për orkestrimin e lehtë të bazuar në REST dhe Motorin e Punës (pa Java)

Pra, së pari duhet të ekzekutoni fetchAndLock (pasi që punëtorët e tjerë mund të marrin detyra njëkohësisht për të shkallëzuar 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

Pastaj, njoftoni Camunda se përpunuesi ka përfunduar punën (mbani parasysh se duhet të jepni identifikuesin e detyrës ekstern, të marrë në kërkesën 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

Kjo Ă«shtĂ« gjithçka — akoma nuk keni pasur nevojĂ« pĂ«r Java, apo jo? Dhe kjo Ă«shtĂ« e mjaftueshme pĂ«r tĂ« filluar!

Bibliotekat e klientit

Thirrja e API REST është e lehtë në çdo gjuhë programimi. Në JavaScript, është e përshtatshme ta bëni këtë me JQuery, ndërsa në C# përdorni System.Net.Http dhe Newtonsoft.Json. Por kjo do të marrë kohë. Kështu që, mund të përdorni një bibliotekë klienti.

Aktualisht janë në dispozicion disa biblioteka klienti të gatshme:

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

Përveç JavaScript dhe Java, bibliotekat e klientit nuk janë pjesë e produktit Camunda. Mos prisni që ato të mbështesin të gjitha aftësitë e REST API Camunda. Nëse biblioteka nuk ofron një funksion të caktuar, kjo nuk do të thotë se ai nuk ekziston, gjithmonë kontrolloni REST API Camunda. Projekte tipike përdorin bibliotekat si një pikënisje dhe shabllon.

Shembulli me C#

Duke përdorur bibliotekën e klientit të përmendur më sipër, ne mund ta shkruajmë thjesht:

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

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

Më shumë informacion mund të gjendet në faqen github.com

Metoda alternative për të nisur Camunda

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

Si një alternativë për imazhin e gatshëm Docker nga Camunda, mund të përgatisni vetë Tomcat (p.sh., mbi bazën e imazheve zyrtare Docker Tomcat) dhe më pas të kopjoni në të Camunda si një nga të ashtuquajturat WAR-files.

Përdorimi i Camunda për orkestrimin e lehtë të bazuar në REST dhe Motorin e Punës (pa Java)

Nëse keni shumë kërkesa shtesë dhe mund të konfiguroni ambientin e ndërtimit Java, mund të konfiguroni gjithashtu Camunda Standalone WAR. Konfiguroni ndërtimin Maven siç është në këto shembuj: ndërtimi Maven me konfigurinë WAR ose ndërtimi Maven me Overlay.

Nisja e shpërndarjes Camunda Tomcat

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

Përdorimi i Camunda për orkestrimin e lehtë të bazuar në REST dhe Motorin e Punës (pa Java)

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

Nisja e Camunda duke përdorur Tomcat

Alternativa e fundit është të konfiguroni vetë Tomcat dhe të instaloni Camunda në të, duke ndjekur përshkrimin e instalimit. Kjo do t'ju mundësojë 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, do tĂ« nevojitet tĂ« bĂ«ni disa konfigurime pĂ«rfundimtare pĂ«r tĂ« nisur Camunda. Camunda ka rekomandime qĂ« e pĂ«rshkruajnĂ« kĂ«tĂ« shumĂ« hollĂ«sisht, por nuk do t’i pĂ«rmend kĂ«to nĂ« kĂ«tĂ« artikull — do tĂ« pĂ«rmend vetĂ«m njĂ« shembull: REST API e shpĂ«rndarjes nĂ« mĂ«nyrĂ« tĂ« paracaktuar nuk Ă«shtĂ« e konfiguruar pĂ«r autentifikim. Ndoshta do tĂ« dĂ«shironit ta ndryshonit kĂ«tĂ«.

Përmbledhje.

Siç e keni vënë re, të filloni të punoni me Camunda është shumë e lehtë, 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ë, veçanërisht përdorimi i Docker.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster