PĂ«rshĂ«ndetje, Habr! Ju prezantoj pĂ«rkthimin e artikullit autori Bernd RĂŒcker.
07.07.2020, pĂ«rkthim Bernd RĂŒcker

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 ë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:

Proceset në Camunda përcaktohen në BPMN, i cili kryesisht është një skedar XML. Ai mund të modelohet me .
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.

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ë .
Nëse dëshironi të nisni Camunda Enterprise Edition, mund ta ndryshoni lehtësisht .
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ë:

Tani mund të përdorni . 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 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 , 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).

Pra, së pari duhet të ekzekutoni (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 (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: . E mbështetur nga Camunda;
- Java: . E mbështetur nga Camunda;
- C#: dhe . 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: â 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 ListKodu burimor funksional mund të gjendet në internet: . Një shembull tjetër është i disponueshëm në adresën .
ĐŃĐžĐŒĐ”Ń Ń 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
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.

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 ose ndërtimi .
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 .

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ç . 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ë, . 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
