07.07.2020/XNUMX/XNUMX, traduzzjoni oġġetti Bernd Rucker
Spiss niddiskuti l-arkitettura ta’ mikroservizzi ma’ nies li mhumiex Java: żviluppaturi C#, żviluppaturi Node.JS/JavaScript, jew dilettanti ta’ Golang. Kollha kemm huma jiffaċċjaw il-fatt li jeħtieġu mekkaniżmu ta 'orkestrazzjoni f'arkitettura ta' mikroservizz, jew sempliċement għodda biex jissimplifikaw il-fluss tax-xogħol u jiksbu l-abbiltà li jordnaw, jimmaniġġjaw timeouts, Saga u tranżazzjonijiet ta 'kumpens.
Pjattaforma BPM ma sors miftuħ minn Camunda kbir għal kompiti bħal dawn. Il-ħbiberija tal-iżviluppatur hija waħda mill-karatteristiċi ewlenin tal-prodott. Imma jekk tħares lejn id-dokumentazzjoni tagħha, jista 'jkollok l-impressjoni li l-"ħbiberija" ta' Camunda hija mmirata prinċipalment għall-iżviluppaturi Java. Il-pjattaforma tipprovdi ħafna opportunitajiet biex tgħaqqad il-funzjonijiet u l-estensjonijiet tiegħek stess, iżda dan kollu jsir f'Java. Huwa tassew?
Le! Fil-fatt, tista 'faċilment tmexxi Camunda mingħajr ebda għarfien Java u twaqqaf l-arkitettura għall-kodiċi fi kwalunkwe lingwa tal-għażla tiegħek. F'dan l-artikolu, se nħarsu lejn:
arkitettura bażika;
REST API
pariri dwar libreriji tal-klijenti eżistenti għal lingwi minbarra Java;
eżempju bl-użu ta 'C# u Node.JS;
modi kif tibda s-server Camunda (Docker jew Tomcat).
arkitettura
Camunda hija miktuba bil-Java u teħtieġ Java Virtual Machine (JVM) biex taħdem. Camunda jipprovdi REST API li jippermettilek tikteb fi kwalunkwe lingwa li tixtieq u tuża REST ma' Camunda:
Il-flussi tax-xogħol f'Camunda huma definiti f'BPMN, li bażikament huwa fajl XML. Jista 'jiġi mmudellat bi Camunda Modeler.
Tmexxi Camunda permezz ta 'immaġni Docker mibnija minn qabel
L-eħfef mod biex tmexxi Camunda huwa li tuża Docker. Modi alternattivi biex tniedi Camunda huma deskritti aktar tard f'dan l-artikolu.
F'dan il-każ, sempliċement mexxi:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
M'għandekx għalfejn tinkwieta dwar Linux, JVMs jew Tomcats. Dockerfiles u dokumentazzjoni bażika (per eżempju, struzzjonijiet għall-konnessjoni mad-databases meħtieġa) huma disponibbli fuq GitHub.
Jekk trid tmexxi Camunda Enterprise Edition tista' faċilment tibdel dockerfile.
Madankollu, it-tmexxija ta' Camunda ma' Docker għandha żvantaġġ wieħed: tispiċċa b'verżjoni ta' Tomcat li mhux dejjem tinkludi l-aħħar soluzzjoni. Biex taħdem madwar dan, tista 'toħloq l-immaġni Docker tiegħek stess ibbażata fuq id-distribuzzjoni Tomcat mixtieqa, kif muri f'dan l-eżempju, jew tuża waħda mis-soluzzjonijiet deskritti hawn taħt.
Skjerament tal-Mudell tal-Proċess
Ejja nħarsu lejn eżempju bl-użu tal-mudell Saga għal prenotazzjoni ta' vjaġġ klassiku fejn trid tiskatta tliet azzjonijiet wara xulxin u tikkumpensa b'mod grazzjuż għal azzjonijiet kompluti b'suċċess f'każ ta' falliment aktar tard. Rappreżentat fil-forma BPMN, jidher bħal dan:
Issa tista 'taħdem każijiet ġodda tal-fluss tax-xogħol billi tuża l-API REST u tgħaddi d-dejta li trid tara bħala varjabbli tal-istanza tal-fluss tax-xogħol:
Il-mistoqsija interessanti li jmiss hija: kif Camunda jsejjaħ proċeduri bħall-ibbukkjar ta' karozza? Camunda tista 'mhux biss issejjaħ servizzi immedjatament (Push-Principe) bl-użu ta' xi built-in konnetturi, iżda wkoll poġġi oġġetti tax-xogħol f'tip ta 'ordni integrata. Il-ħaddiem imbagħad jista' jġib oġġetti tax-xogħol permezz ta' REST, iwettaq ix-xogħol, u jgħid lil Camunda biex tlesti (Pull-Prinċipju).
Allura l-ewwel trid tesegwixxi fetchAndLock (għax ħaddiema oħra jistgħu jirċievu kompiti fl-istess ħin biex iskala s-sistema):
Dak hu - għadek m'għandek bżonn l-ebda Java, hux? U dan huwa biżżejjed biex tibda!
Libreriji Klijenti
Is-sejħa ta' REST API hija faċli fi kwalunkwe lingwa ta' programmar. F'JavaScript, dan isir b'mod konvenjenti billi tuża JQuery, u f'C#, billi tuża System.Net.Http u Newtonsoft.Json. Iżda dan se jieħu ż-żmien. Allura tista 'sempliċement tuża xi librerija tal-klijenti.
Bħalissa, diversi libreriji tal-klijenti lesti huma disponibbli:
C #:rabta и rabta. Dawn iż-żewġ proġetti huma fi stat intermedju u prattikament inattivi, iżda jistgħu jservu bħala punt ta’ tluq tajjeb;
PHP: rabta - mhux komplut wisq u ma jinkludix l-aħħar bidliet fl-API, imma naf proġetti li jużawha.
Bl-eċċezzjoni ta' JavaScript u Java, il-libreriji tal-klijenti mhumiex parti mill-prodott Camunda innifsu. Tistenniex li jappoġġjaw il-karatteristiċi kollha tal-API REST ta' Camunda. Sempliċement għax librerija ma tipprovdix ċerta funzjoni ma jfissirx li mhix hemm, dejjem iċċekkja l-API REST ta' Camunda. Proġetti ta' referenza jużaw libreriji bħala punt tat-tluq u mudell.
Eżempju C#
Bl-użu tal-librerija tal-klijenti ta 'hawn fuq, nistgħu sempliċement niktbu:
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", "..." }
});
Il-kodiċi tas-sors li jaħdem bis-sħiħ jista' jinstab online: rabta. Eżempju ieħor huwa disponibbli fuq rabta.
Aktar informazzjoni tista’ tinstab fuq il-websajt Github.com
Modi Alternattivi biex Tniedi Camunda
Immaġni tad-Docker apposta bi "Camunda waħedha GWERRA"
Bħala alternattiva għal immaġni Docker mibnija minn qabel minn Camunda, tista 'tipprepara Tomcat lilek innifsek (per eżempju, ibbażat fuq l-immaġni uffiċjali Docker Tomcat) u mbagħad tikkopja lil Camunda fiha bħala wieħed mill-hekk imsejħa fajls WAR.
Jekk għandek ħafna rekwiżiti addizzjonali u tista 'twaqqaf ambjent ta' bini Java, tista 'wkoll twaqqaf Camunda Standalone war. Waqqa 'Maven build bħal f'dawn l-eżempji: build Maven b'konfigurazzjoni tal-gwerra jew assemblaġġ Maven ma Overlay.
Nibdew id-distribuzzjoni Camunda Tomcat
Għażla oħra hija li sempliċiment tniżżel id-distribuzzjoni Camunda Tomcat, tħollha, u tħaddem. Dan jeħtieġ biss il-Java Runtime Environment (JRE) installat fuq il-kompjuter tiegħek. Jista 'jkun faċilment niżżel minn hawn.
Sabiex tibdel id-database jew tagħmel xi ħaġa oħra trid tikkonfigura Tomcat bħal deskritt fid-dokumentazzjoni. Naf li Tomcat jista 'ħoss ikkumplikat, iżda fil-fatt huwa sempliċi ħafna. U Google jaf it-tweġibiet għal dak kollu li jista 'jkun meħtieġ fil-proċess.
Tmexxi Camunda bl-użu ta' Tomcat
L-aħħar alternattiva hija li twaqqaf Tomcat lilek innifsek u tinstalla Camunda fih, wara d-deskrizzjoni tal-installazzjoni. Dan jagħtik l-għażla li tuża kwalunkwe verżjoni ta' Tomcat li tippreferi, jew tinstallaha bħala servizz tal-Windows, pereżempju.
Tnedija ta' Camunda fil-produzzjoni
Dan normalment jeħtieġ xi setup finali biex imexxi Camunda. Hemm linji gwida f'Camunda li jiddeskrivu dan fid-dettall kbir, iżda mhux se nidħol fihom f'dan l-artikolu - se nsemmi eżempju wieħed biss: l-API REST tad-distribuzzjoni mhix konfigurata għall-awtentikazzjoni b'mod awtomatiku. Inti tista 'tixtieq li tibdel dan.
Bħala sinteżi-up
Kif tistgħu taraw, huwa faċli ħafna li tibda b'Camunda, irrispettivament mill-lingwa li tkun qed tuża. Il-punt ewlieni huwa li l-interazzjoni kollha ssir permezz tal-API REST. L-installazzjoni hija pjuttost faċli wkoll, speċjalment meta tuża Docker.