Mi ofte diskutas pri mikroserva arkitekturo kun ne-Java homoj: C#-programistoj, Node.JS/JavaScript-programistoj aŭ Golang-ŝatantoj. Ĉiuj ili alfrontas la fakton, ke ili bezonas instrumentan mekanismon en mikroserva arkitekturo, aŭ nur ilon por simpligi la laborfluon kaj akiri la kapablon ordigi, pritrakti tempon, Saga kaj kompensi transakciojn.
BPM-platformo kun malfermfonteco de Camunda bonega por tiaj taskoj. Amikeco por programistoj estas unu el la ĉefaj trajtoj de la produkto. Sed se vi rigardas ĝian dokumentadon, vi eble havos la impreson, ke la "amikeco" de Camunda ĉefe celas al Java-programistoj. La platformo provizas multajn eblojn por konekti viajn proprajn funkciojn kaj etendaĵojn, sed ĉio estas farita en Java. Ĉu vere?
Ne! Fakte, vi povas facile ruli Camunda sen ajna Java scio kaj agordi la arkitekturon por kodo en iu ajn lingvo de via elekto. En ĉi tiu artikolo, ni rigardos:
baza arkitekturo;
REST API
konsiloj pri ekzistantaj klientbibliotekoj por lingvoj krom Java;
ekzemplo uzante C# kaj Node.JS;
manieroj lanĉi la Camundan servilon (Docker aŭ Tomcat).
arkitekturo
Camunda estas skribita en Java kaj bezonas Java Virtual Machine (JVM) por funkcii. Camunda provizas REST-API, kiu permesas vin skribi en iu ajn lingvo, kiun vi ŝatas kaj uzi REST kun Camunda:
Laborfluoj en Camunda estas difinitaj en BPMN, kiu estas esence XML-dosiero. Ĝi povas esti modeligita kun Camunda Modeler.
Kurante Camunda tra antaŭkonstruita Docker-bildo
La plej facila maniero funkciigi Camunda estas uzi Docker. Alternativaj manieroj lanĉi Camunda estas priskribitaj poste en ĉi tiu artikolo.
En ĉi tiu kazo, simple rulu:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Vi ne devas zorgi pri Linukso, JVM aŭ Tomcats. Dockerfiles kaj baza dokumentaro (ekzemple, instrukcioj por konekti al la postulataj datumbazoj) estas haveblaj ĉe GitHub.
Se vi volas ruli Camundan Enterprise Edition, vi povas facile ŝanĝi dockerfile.
Tamen, ruli Camunda kun Docker havas unu malavantaĝon: vi finos kun versio de Tomcat, kiu ne ĉiam inkluzivas la plej novajn korektojn. Por solvi ĉi tion, vi povas krei vian propran Docker-bildon bazitan sur la dezirata Tomcat-distribuo, kiel montrite en ĉi tiu ekzemplo, aŭ uzi unu el la solvoj priskribitaj sube.
Proceza Modela Deplojo
Ni rigardu ekzemplon uzante la ŝablonon Saga por klasika vojaĝo-rezervado, kie vi volas ekigi tri agojn sinsekve kaj gracie kompensi por sukcese plenumitaj agoj en kazo de posta fiasko. Reprezentite en formo BPMN, ĝi aspektas jene:
Nun vi povas uzi REST API por proceza modeldeplojo. Ni diru, ke vi konservas ĝin kiel trip.bpmn kaj rulu Camunda per Docker, por ke ĝi estu disponebla ĉe localhost:8080:
La sekva interesa demando estas: kiel Camunda vokas procedurojn kiel rezervi aŭton? Camunda povas ne nur voki servojn tuj (Push-Principle) uzante iujn enkonstruitajn konektiloj, sed ankaŭ meti laboraĵojn en speco de enkonstruita ordo. La laboristo tiam povas alporti laboraĵojn per REST, plenumi la laboron kaj rakonti al Camunda kompletigi (Pull-Principle).
Do unue vi devas ekzekuti fetchAndLock (ĉar aliaj laboristoj povas ricevi taskojn samtempe por grimpi la sistemon):
Jen — vi ankoraŭ ne bezonis Javan, ĉu ne? Kaj tio sufiĉas por komenci!
Klientaj Bibliotekoj
Voki REST API estas facile en iu ajn programlingvo. En JavaScript, ĉi tio estas oportune farita uzante JQuery, kaj en C#, uzante System.Net.Http kaj Newtonsoft.Json. Sed ĉi tio prenos tempon. Do vi povas simple uzi iun klientan bibliotekon.
Nuntempe, pluraj pretaj klientbibliotekoj estas disponeblaj:
C #:ligilo и ligilo. Ambaŭ ĉi tiuj projektoj estas en meza stato kaj preskaŭ neaktivaj, sed povas servi kiel bona deirpunkto;
PHP: ligilo - ne tro kompleta kaj ne inkluzivas la lastajn API-ŝanĝojn, sed mi konas projektojn, kiuj uzas ĝin.
Kun la escepto de JavaScript kaj Java, la klientbibliotekoj ne estas parto de la Camunda produkto mem. Ne atendu, ke ili subtenas ĉiujn REST API-funkciojn de Camunda. Nur ĉar biblioteko ne disponigas certan funkcion ne signifas ke ĝi ne estas tie, ĉiam kontrolu REST API de Camunda. Referencaj projektoj uzas bibliotekojn kiel deirpunkton kaj ŝablonon.
C# ekzemplo
Uzante la supran klientbibliotekon, ni povas simple skribi:
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", "..." }
});
La plene funkcianta fontkodo troveblas interrete: ligilo. Alia ekzemplo estas havebla ĉe ligilo.
Kiel alternativo al antaŭkonstruita Docker-bildo de Camunda, vi povas mem prepari Tomcat (ekzemple, surbaze de la oficialaj bildoj de Docker Tomcat) kaj poste kopii Camunda en ĝin kiel unu el la tiel nomataj WAR-dosieroj.
Se vi havas multajn kromajn postulojn kaj povas agordi Java-konstruan medion, vi ankaŭ povas agordi Camundan Standalone-militon. Agordu Maven-konstruaĵon kiel en ĉi tiuj ekzemploj: build Maven kun militagordo aŭ kunigo Maven kun Overlay.
Lanĉante la Camunda Tomcat-distribuon
Alia opcio estas simple elŝuti la Camunda Tomcat-distribuon, malzipi ĝin kaj ruli ĝin. Ĉi tio nur postulas la Java Runtime Environment (JRE) instalita sur via komputilo. Ĝi povas esti facile elŝutu de ĉi tie.
Por ŝanĝi la datumbazon aŭ fari ion alian, vi devas agordi Tomcat kiel priskribita en dokumentaro. Mi scias, ke Tomcat povas soni komplika, sed ĝi fakte estas tre simpla. Kaj Guglo scias la respondojn al ĉio, kio povas esti postulata en la procezo.
Kurante Camunda uzante Tomcat
La lasta alternativo estas agordi Tomcat mem kaj instali Camunda en ĝi, sekvante la priskribon pri instalado. Ĉi tio donos al vi la eblon uzi kian ajn version de Tomcat vi preferas, aŭ instali ĝin kiel Vindoza servo, ekzemple.
Lanĉante Camunda en produktadon
Ĉi tio kutime postulos iun finan aranĝon por ruli Camunda. Estas gvidlinioj en Camunda, kiuj priskribas tion tre detale, sed mi ne eniros ilin en ĉi tiu artikolo - mi nomos nur unu ekzemplon: la REST API de la distribuo ne estas agordita por aŭtentikigo defaŭlte. Vi eble volas ŝanĝi ĉi tion.
Supre
Kiel vi povas vidi, estas tre facile komenci kun Camunda, sendepende de la lingvo, kiun vi uzas. La ŝlosila punkto estas, ke ĉiu interago estas farita per la REST API. Instalado ankaŭ estas sufiĉe facila, precipe kiam vi uzas Docker.