Čau Habr! Piedāvāju jūsu uzmanībai raksta tulkojumu autors Bernds Rūkers.
07.07.2020., tulkojums Bernds Rukers

Es bieži apspriežu mikropakalpojumu arhitektūru ar cilvēkiem, kas nav Java: C# izstrādātāji, Node.JS/JavaScript izstrādātāji vai Golang cienītāji. Viņi visi saskaras ar faktu, ka viņiem ir nepieciešams orķestrēšanas mehānisms mikropakalpojumu arhitektūrā vai vienkārši rīks, lai racionalizētu darbplūsmu un iegūtu iespēju pasūtīt, apstrādāt taimautus, Saga un kompensācijas darījumus.
BPM platforma ar lieliski piemērots šādiem uzdevumiem. Izstrādātājam draudzīgums ir viena no produkta galvenajām iezīmēm. Bet, ja paskatās uz tā dokumentāciju, var rasties iespaids, ka Camundas "draudzīgums" galvenokārt ir vērsts uz Java izstrādātājiem. Platforma nodrošina daudzas iespējas savu funkciju un paplašinājumu savienošanai, taču tas viss tiek darīts Java. Vai tiešām?
Nē! Faktiski jūs varat viegli palaist Camunda bez jebkādām Java zināšanām un iestatīt koda arhitektūru jebkurā jūsu izvēlētajā valodā. Šajā rakstā mēs apskatīsim:
- pamata arhitektūra;
- REST API
- konsultācijas par esošajām klientu bibliotēkām valodām, kas nav Java;
- piemēram, izmantojot C# un Node.JS;
- veidi, kā startēt Camunda serveri (Docker vai Tomcat).
Arhitektūra
Camunda ir rakstīta Java valodā, un tās darbībai ir nepieciešama Java virtuālā mašīna (JVM). Camunda nodrošina REST API, kas ļauj rakstīt jebkurā valodā, kas jums patīk, un izmantot REST ar Camunda:

Camunda darbplūsmas ir definētas BPMN, kas būtībā ir XML fails. To var modelēt ar .
Camundas palaišana, izmantojot iepriekš izveidotu Docker attēlu
Vienkāršākais veids, kā palaist Camunda, ir izmantot Docker. Alternatīvi veidi, kā palaist Camunda, ir aprakstīti vēlāk šajā rakstā.

Šajā gadījumā vienkārši palaidiet:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Jums nav jāuztraucas par Linux, JVM vai Tomcats. Dockerfaili un pamatdokumentācija (piemēram, instrukcijas pieslēgšanai nepieciešamajām datu bāzēm) ir pieejamas vietnē .
Ja vēlaties palaist Camunda Enterprise Edition, varat to viegli mainīt .
Tomēr Camunda palaišanai ar Docker ir viens mīnuss: jūs iegūsit Tomcat versiju, kurā ne vienmēr ir iekļauti jaunākie labojumi. Lai to novērstu, varat izveidot savu Docker attēlu, pamatojoties uz vēlamo Tomcat izplatīšanu, kā parādīts šajā piemērā, vai izmantot kādu no tālāk aprakstītajiem risinājumiem.
Procesa modeļa ieviešana
Apskatīsim piemēru, izmantojot Saga veidni klasiskai ceļojuma rezervēšanai, kur vēlaties aktivizēt trīs darbības pēc kārtas un graciozi kompensēt veiksmīgi pabeigtas darbības vēlākas kļūmes gadījumā. Atveidots BPMN formā, tas izskatās šādi:

Tagad jūs varat izmantot . Pieņemsim, ka saglabājat to kā trip.bpmn un palaižat Camunda, izmantojot Docker, lai tas būtu pieejams vietnē 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
Tagad jūs varat skriet izmantojot REST API un nododiet datus, kurus vēlaties redzēt kā darbplūsmas gadījumu mainīgos:
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
Nākamais interesantais jautājums ir: kā Camunda izsauc tādas procedūras kā automašīnas rezervēšana? Camunda var ne tikai nekavējoties izsaukt pakalpojumus (Push-Principle), izmantojot kādu iebūvētu , bet arī sakārtot darba priekšmetus tādā kā iebūvētā kārtībā. Pēc tam darbinieks var atnest darba vienumus, izmantojot REST, veikt darbu un likt Camundai pabeigt (pievilkšanas princips).

Tātad vispirms jums ir jāizpilda (jo citi darbinieki vienlaikus var saņemt uzdevumus, lai palielinātu sistēmu):
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
Tad pasaki to Kamundai (Ņemiet vērā, ka jums jāievada ārējā uzdevuma ID, kas saņemts pirmajā pieprasījumā):
curl
-H "Content-Type: application/json"
-X POST
-d <!-- -->'{"workerId":"worker123", "variables": {}}'<!-- -->
http://localhost:8080/engine-rest/<!-- -->external-task/EXTERNAL_TASK_ID/complete
Tas arī viss - jums joprojām nav vajadzīga Java, vai ne? Un ar to pietiek, lai sāktu!
Klientu bibliotēkas
REST API izsaukšana ir vienkārša jebkurā programmēšanas valodā. JavaScript to var ērti izdarīt, izmantojot JQuery, un C#, izmantojot System.Net.Http un Newtonsoft.Json. Bet tas prasīs laiku. Tātad jūs varat vienkārši izmantot kādu klienta bibliotēku.
Šobrīd ir pieejamas vairākas gatavas klientu bibliotēkas:
- JavaScript: . Atbalsta Camunda;
- Java: . Atbalsta Camunda;
- C #: и . Abi šie projekti ir vidējā stāvoklī un praktiski neaktivizējas, taču var kalpot kā labs sākumpunkts;
- PHP: - nav pārāk pilnīga un neietver jaunākās API izmaiņas, bet es zinu projektus, kas to izmanto.
Klientu bibliotēkas, izņemot JavaScript un Java, nav paša Camunda produkta daļa. Negaidiet, ka tie atbalstīs visas Camundas REST API funkcijas. Tas, ka bibliotēka nenodrošina noteiktu funkciju, nenozīmē, ka tās nav, vienmēr pārbaudiet Camundas REST API. Atsauces projektos bibliotēkas tiek izmantotas kā sākumpunkts un veidne.
C# piemērs
Izmantojot iepriekš minēto klienta bibliotēku, mēs varam vienkārši uzrakstīt:
var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
// Deploy the BPMN XML file from the resources
camunda.RepositoryService.Deploy("trip-booking", new List<object> {
FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
});
// Register workers
registerWorker("reserve-car", externalTask => {
// here you can do the real thing! Like a sysout :-)
Console.WriteLine("Reserving car now...");
camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
});
registerWorker("cancel-car", externalTask => {
Console.WriteLine("Cancelling car now...");
camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
});
registerWorker("book-hotel", externalTask => {
Console.WriteLine("Reserving hotel now...");
camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
});
// Register more workers...
StartPolling();
string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary<string, object>()
{
{"someBookingData", "..." }
});
Pilnībā strādājošu avota kodu var atrast tiešsaistē: . Vēl viens piemērs ir pieejams vietnē .
Piemērs ar 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();
Plašāku informāciju var atrast tīmekļa vietnē
Alternatīvi veidi, kā palaist Camunda
Pielāgots Docker attēls ar “Camunda standalone WAR”
Kā alternatīvu iepriekš izveidotajam Camundas Docker attēlam varat pats sagatavot Tomcat (piemēram, pamatojoties uz oficiālajiem Docker Tomcat attēliem) un pēc tam kopēt tajā Camunda kā vienu no tā sauktajiem WAR failiem.

Ja jums ir daudz papildu prasību un varat iestatīt Java būvēšanas vidi, varat arī iestatīt Camunda Standalone war. Iestatiet Maven būvējumu, kā parādīts šajos piemēros: build vai montāža .
Tiek sākta Camunda Tomcat izplatīšana
Vēl viena iespēja ir vienkārši lejupielādēt Camunda Tomcat izplatīšanu, izpakot to un palaist to. Tam nepieciešama tikai jūsu datorā instalētā Java Runtime Environment (JRE). Tas var būt viegli .

Lai mainītu datu bāzi vai darītu kaut ko citu, ir jākonfigurē Tomcat līdzīgi . Es zinu, ka Tomcat var izklausīties sarežģīti, bet patiesībā tas ir ļoti vienkārši. Un Google zina atbildes uz visu, kas var būt nepieciešams šajā procesā.
Camunda palaišana, izmantojot Tomcat
Pēdējā alternatīva ir pašam iestatīt Tomcat un instalēt tajā Camunda, . Tas dos jums iespēju izmantot vēlamo Tomcat versiju vai instalēt to, piemēram, kā Windows pakalpojumu.
Camunda ražošanas uzsākšana
Lai palaistu Camunda, parasti būs nepieciešama galīgā iestatīšana. Camunda ir atrodamas vadlīnijas, kas to apraksta ļoti detalizēti, taču šajā rakstā es tajās neiedziļināšos - nosaukšu tikai vienu piemēru: izplatīšanas REST API pēc noklusējuma nav konfigurēta autentifikācijai. Iespējams, vēlēsities to mainīt.
Summējot-up
Kā redzat, ir ļoti viegli sākt darbu ar Camunda neatkarīgi no izmantotās valodas. Galvenais ir tas, ka visa mijiedarbība tiek veikta, izmantojot REST API. Arī instalēšana ir diezgan vienkārša, it īpaši, ja izmantojat Docker.
Avots: www.habr.com
