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 atvÄrtais avots no Camunda 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 Kamunda modelÄtÄja.
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Ä GitHub.
Ja vÄlaties palaist Camunda Enterprise Edition, varat to viegli mainÄ«t Dockerfile.
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 REST API procesa modeļa izvietoÅ”anai. PieÅemsim, ka saglabÄjat to kÄ trip.bpmn un palaižat Camunda, izmantojot Docker, lai tas bÅ«tu pieejams vietnÄ localhost:8080:
Tagad jÅ«s varat skriet jauni darbplÅ«smas gadÄ«jumi izmantojot REST API un nododiet datus, kurus vÄlaties redzÄt kÄ darbplÅ«smas gadÄ«jumu mainÄ«gos:
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 savienotÄji, 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 fetchAndLock (jo citi darbinieki vienlaikus var saÅemt uzdevumus, lai palielinÄtu sistÄmu):
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:
C #:saite Šø saite. Abi Å”ie projekti ir vidÄjÄ stÄvoklÄ« un praktiski neaktivizÄjas, taÄu var kalpot kÄ labs sÄkumpunkts;
PHP: saite - 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Ä: saite. VÄl viens piemÄrs ir pieejams vietnÄ saite.
PlaÅ”Äku informÄciju var atrast tÄ«mekļa vietnÄ github.com
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 Maven ar kara konfigurÄciju vai montÄža Maven ar pÄrklÄjumu.
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 lejupielÄdÄt no Å”ejienes.
Lai mainÄ«tu datu bÄzi vai darÄ«tu kaut ko citu, ir jÄkonfigurÄ Tomcat lÄ«dzÄ«gi aprakstÄ«ts dokumentÄcijÄ. 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, ievÄrojot uzstÄdÄ«Å”anas aprakstu. 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.