PĂ«rshĂ«ndetje, Habr! Po ju prezantoj njĂ« pĂ«rkthim tĂ« artikullit autori Bernd RĂŒcker.
07.07.2020, pĂ«rkthim Bernd RĂŒcker

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

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 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.

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

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

Pra, së pari ju nevojitet të realizoni (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 (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: . Camunda mbështetet;
- Java: . Camunda mbështetet;
- C#: dhe . 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: â 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 ListKodi burimor tërësisht funksional mund të gjendet në Internet: . Një shembull tjetër është 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 + " - shtuar diçka";
callback(null, {
variables: {
someNewData: someNewData
}
});
});
workers.shutdown();
Më shumë informacion mund të gjeni në sit
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.

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

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