Tere, Habr! Esitlen teile tĂ”lget artiklist autor Bernd RĂŒcker.
07.07.2020, tĂ”lge Bernd RĂŒcker

Kofti arutan sageli mikroteenuste arhitektuuri inimestega, kes on kaugel Javast: C# arendajatega, Node.JS/JavaScriptiga vÔi Golangiga. KÔik nad seisavad silmitsi vajadusega orkestreerimise mehhanismi jÀrele mikroteenuste arhitektuuris vÔi lihtsalt töövoo optimeerimise tööriistale, mis loob vÔimaluse jÀrjestamiseks, ajastamiseks, Saga ja kompensatsioonitehinguteks.
BPM-platvorm, sobib selliste ĂŒlesannete jaoks suurepĂ€raselt. Arendajale sĂ”bralikkus on toote ĂŒks peamisi omadusi. Kuid kui vaadata selle dokumentatsiooni, vĂ”ib jÀÀda mulje, et Camunda «sĂ”bralikkus» on suunatud peamiselt Java arendajatele. Platvorm pakub palju vĂ”imalusi oma funktsioonide ja laienduste integreerimiseks, kuid kĂ”ik see toimub Java-s. Kas see on tĂ”esti nii?
Ei! Tegelikult saab Camundat hÔlpsasti kÀivitada ilma Java-teadmisteta ja seadistada arhitektuuri, mis sobib valdavalt teie valitud keele koodiga. Selles artiklis kÀsitleme:
- pÔhiarhitektuuri;
- REST API;
- nÔuandeid olemasolevate klienditeekide kohta, mis ei ole Java;
- nÀide C# ja Node.JS kasutamisest;
- Camunda serveri kÀivitamise meetodid (Docker vÔi Tomcat).
Arhitektuur
Camunda on kirjutatud Java-s ja selle kÀitamiseks on vajalik Java virtuaalmasin (JVM). Camunda pakub REST API-d, mis vÔimaldab teil kirjutada igas keeles, mis teile meeldib, ja kasutada REST-i Camundaga:

Camunda töövood on mÀÀratletud BPMN-is, mis on sisuliselt XML-fail. Selle saab modelleerida .
Camunda kÀivitamine eelnevalt loodud Docker pildist
Lihtsaim viis Camunda kÀivitamiseks on kasutada Dockerit. Alternatiivsed Camunda kÀivitamise meetodid on kirjeldatud selle artikli hilisemates osades.

Sel juhul on piisav lihtsalt kÀivitada:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Te ei pea muretsema Linuxi, Java virtuaalmasinate vĂ”i Tomcat'i pĂ€rast. Dockerfile'id ja pĂ”hidokumendid (nt instruktsioonid andmebaasidega ĂŒhendamiseks) on saadaval .
Kui soovite kÀivitada Camunda Enterprise Editioni, saate seda hÔlpsasti muuta .
Kuid Camunda kĂ€ivitamisel Dockeriga on ĂŒks puudus: saate Tomcat'i versiooni, mis ei pruugi alati sisaldada viimaseid parandusi. Selle ĂŒletamiseks vĂ”ite ise luua Docker'i pildi soovitud Tomcat'i distributsiooni pĂ”hjal, nagu nĂ€idatud allolevas nĂ€ites, vĂ”i kasutada mĂ”nda lahendust, mida allpool kirjeldatakse.
Protsessi mudeli juurutamine
Vaatame nÀidet, kasutades Saga malli traditsioonilise reisi broneerimise jaoks, kus soovite jÀrjestikku kÀivitada kolme toimingut ja Ôigesti kompenseerida edukalt lÔpule viidud toimingud hilisema tÔrke korral. BPMN vormis nÀeb see vÀlja jÀrgmiselt:

NĂŒĂŒd saate kasutada . Oletame, et olete selle salvestanud nimega trip.bpmn ja kĂ€ivitanud Camunda Dockeris, et see oleks saadaval aadressil 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
NĂŒĂŒd saate kĂ€ivitada REST API kaudu ja edastada andmed, mida soovite nĂ€ha töövoo eksemplari muutujatena:
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
JĂ€rgmine huvitav kĂŒsimus: kuidas Camunda kutsub protseduure, nĂ€iteks auto broneerimist? Camunda suudab mitte ainult kohe kutsuda teenuseid (Push-Princippi), kasutades mĂ”ningaid sisseehitatud , vaid ka asetada tööelemendid oma sisseehitatud jĂ€rjekorda. PĂ€rast seda saab worker töötlemise elemendid RESTi kaudu kĂ€tte, tĂ€ita töö ja teavitada Camundat lĂ”petamisest (Pull-Principle).

Seega peate esmalt tĂ€itma kuna teised workerid vĂ”ivad ĂŒlesandeid samaaegselt kĂ€tte saada sĂŒsteemi skaleerimiseks:
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
SeejĂ€rel teavitage Camundat, et (pange tĂ€hele, et peate sisestama esimese pĂ€ringu kĂ€igus saadud vĂ€lise ĂŒlesande identifikaatori):
curl
-H "Content-Type: application/json"
-X POST
-d '{"workerId":"worker123", "variables": {}}'
http://localhost:8080/engine-rest/external-task/EXTERNAL_TASK_ID/complete
NĂŒĂŒd on kĂ”ik â te ei ole ikka veel vajanud Java't, eks? Ja sellest piisab, et alustada!
Kliendiraamatukogud
REST API-d on lihtne kutsuda mistahes programmeerimiskeeles. JavaScriptis on seda mugav teha JQuery abil, C#-is tuleb kasutada System.Net.Http ja Newtonsoft.Json. Ent see nÔuab aega. SeetÔttu vÔite lihtsalt kasutada mÔnda kliendiraamatukogu.
Praeguseks on saadaval mitu valmis kliendiraamatukogu:
- JavaScript: . Toetab Camundat;
- Java: . Toetab Camundat;
- C#: ja . Need projektid on mÔlemad vahepealses seisus ja praktiliselt mitteaktiivsed, kuid vÔivad olla headeks lÀhtepunktideks;
- PHP: â mitte liiga tĂ€ielik ja mitte kĂ”ikide API muudatustega kaasas olev raamatukogu, kuid ma tean projekte, mis seda kasutavad.
VĂ€ljaspool JavaScripti ja Java't ei ole kliendiraamatukogud osa Camunda toote enda kĂŒljest. Ărge oodake, et need toetavad kĂ”iki Camunda REST API funktsioone. Kui raamatukogu ei paku teatud funktsiooni, ei tĂ€henda see, et seda seal ei oleks, alati kontrollige Camunda REST API-d. TĂŒĂŒpilised projektid kasutavad raamatukogusid lĂ€htepunktina ja mallina.
C# nÀide
Kasutades ĂŒlaltoodud kliendiraamatukogu, saame lihtsalt kirjutada:
var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
// Lae BPMN XML fail ressurssidest
camunda.RepositoryService.Deploy("trip-booking", new ListTÀielikult töötav lÀhtekood on Internetis saadaval: . Teine nÀide on saadaval aadressil .
ĐŃĐžĐŒĐ”Ń Ń 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();
Lisainfo leiate veebilehelt
Alternatiivsed viisid Camunda kÀivitamiseks
Kohandatud Docker'i pilt 'Camunda standalone WAR'iga
Alternatiivina Camunda valmis Docker'i pildile vĂ”ite ise seadistada Tomcati (nĂ€iteks pĂ”hinedes ametlikel Tomcati Docker'i piltidel) ja seejĂ€rel kopeerida sinna Camunda ĂŒhe nii nimetatud WAR-failina.

Kui teil on palju tÀiendavaid nÔudeid ja te suudate Java koostamiskeskkonda seadistada, saate ka Camunda Standalone WAR-i seadistada. Seadistage Maven'i koostamine jÀrgides neid nÀiteid: koostamine vÔi koostamine .
Camunda Tomcati jaotuse kÀivitamine
Veel ĂŒks variant on lihtsalt alla laadida Camunda Tomcati jaotust, dekompresseerida see ja kĂ€ivitada. Selleks on vajalik ainult Java Runtime Environment (JRE), mis on teie arvutisse installitud. Seda saab hĂ”lpsasti .

Andmebaasi muutmiseks vĂ”i millegi muu tegemiseks peate Tomcati seadistama, nagu . Tean, et Tomcat vĂ”ib tunduda keeruline, kuid tegelikult on see vĂ€ga lihtne. Ja Google teab vastuseid kĂ”ikidele kĂŒsimustele, mis vĂ”ivad protsessi kĂ€igus tekkida.
Camunda kÀivitamine Tomcati abil
Viimane alternatiiv on ise seadistada Tomcat ja paigaldada sinna Camunda, . See annab vÔimaluse kasutada igasuguseid Tomcat'i versioone, mida soovite, vÔi paigaldada selle nÀiteks Windows'i teenusena.
Camunda kÀivitamine tootmises
Tavaliselt on see nĂ”udnud mĂ”ningate lĂ”ppseadistuste tegemist Camunda kĂ€ivitamiseks. Camundal on soovitusi, mis seda vĂ€ga ĂŒksikasjalikult kirjeldavad, kuid ma ei puuduta neid selles artiklis â mainin vaid ĂŒht nĂ€idet: jaotuse REST API ei ole vaikimisi autentimiseks seadistatud. VĂ”ib-olla soovite seda muuta.
KokkuvÔte
Kuidas te vĂ”isite tĂ€hele panna, on Camundaga alustamine vĂ€ga lihtne, olenemata kasutatavast keelest. Peamine punkt on see, et kogu suhtlemine toimub REST API kaudu. Paigaldamine on samuti ĂŒsna lihtne, eriti Docker'i kasutamisel.
Allikas: habr.com
