Pogosto razpravljam o arhitekturi mikrostoritev z ljudmi, ki ne poznajo Jave: razvijalci C#, razvijalci Node.JS/JavaScript ali ljubitelji Golanga. Vsi se soočajo z dejstvom, da potrebujejo mehanizem orkestracije v arhitekturi mikrostoritev ali samo orodje za racionalizacijo delovnega toka in pridobitev zmožnosti naročanja, obravnavanja časovnih omejitev, Saga in kompenzacijskih transakcij.
BPM platforma z odprtokodni od Camunda super za take naloge. Prijaznost do razvijalcev je ena ključnih lastnosti izdelka. Toda če pogledate njeno dokumentacijo, boste morda dobili vtis, da je Camundina "prijaznost" namenjena predvsem razvijalcem Jave. Platforma ponuja veliko možnosti za povezovanje lastnih funkcij in razširitev, vendar je vse narejeno v Javi. Je res?
ne! Pravzaprav lahko preprosto zaženete Camundo brez znanja o Javi in nastavite arhitekturo za kodo v katerem koli jeziku po vaši izbiri. V tem članku si bomo ogledali:
osnovna arhitektura;
REST API
svetovanje o obstoječih odjemalskih knjižnicah za jezike, ki niso Java;
primer z uporabo C# in Node.JS;
načine za zagon strežnika Camunda (Docker ali Tomcat).
arhitektura
Camunda je napisana v Javi in za delovanje potrebuje Java Virtual Machine (JVM). Camunda ponuja REST API, ki vam omogoča pisanje v poljubnem jeziku in uporabo REST s Camundo:
Delovni tokovi v Camundi so definirani v BPMN, ki je v bistvu datoteka XML. Lahko se modelira z Modelir Camunda.
Zagon Camunde skozi vnaprej pripravljeno sliko Docker
Najlažji način za zagon Camunde je uporaba Dockerja. Alternativni načini za zagon Camunde so opisani kasneje v tem članku.
V tem primeru preprosto zaženite:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Ni vam treba skrbeti za Linux, JVM ali Tomcats. Datoteke Docker in osnovna dokumentacija (na primer navodila za povezovanje z zahtevanimi zbirkami podatkov) so na voljo na GitHub.
Če želite zagnati Camunda Enterprise Edition, lahko preprosto spremenite Dockerfile.
Vendar ima izvajanje Camunde z Dockerjem eno slabo stran: na koncu boste imeli različico Tomcata, ki ne vključuje vedno najnovejših popravkov. Če se želite temu izogniti, lahko ustvarite lastno sliko Docker na podlagi želene distribucije Tomcat, kot je prikazano v tem primeru, ali uporabite eno od spodaj opisanih rešitev.
Uvajanje modela procesa
Oglejmo si primer uporabe predloge Saga za klasično rezervacijo potovanja, kjer želite sprožiti tri dejanja zaporedoma in elegantno kompenzirati uspešna dejanja v primeru kasnejšega neuspeha. Predstavljeno v obliki BPMN je videti takole:
Zdaj lahko uporabite API REST za uvajanje modela procesa. Recimo, da ga shranite kot trip.bpmn in zaženete Camundo prek Dockerja, tako da je na voljo na localhost:8080:
Zdaj lahko tečeš novi primerki poteka dela z uporabo API-ja REST in posredujte podatke, ki jih želite videti kot spremenljivke instance delovnega toka:
Naslednje zanimivo vprašanje je: kako Camunda imenuje postopke, kot je rezervacija avtomobila? Camunda ne more le takoj poklicati storitev (princip Push) z uporabo nekaterih vgrajenih priključki, ampak tudi postavite delovne predmete v nekakšen vgrajen red. Delavec lahko nato pridobi delovne elemente prek REST, izvede delo in pove Camundi, naj dokonča (princip vlečenja).
Torej, najprej morate izvesti fetchAndLock (ker lahko drugi delavci istočasno prejmejo naloge za prilagajanje sistema):
To je to – še vedno niste potrebovali nobene Jave, kajne? In to je dovolj za začetek!
Odjemalske knjižnice
Klicanje API-ja REST je preprosto v katerem koli programskem jeziku. V JavaScriptu je to priročno narejeno z uporabo JQuery, v C# pa z uporabo System.Net.Http in Newtonsoft.Json. Toda to bo trajalo. Tako lahko preprosto uporabite knjižnico strank.
Trenutno je na voljo več že pripravljenih odjemalskih knjižnic:
C #:povezava и povezava. Oba projekta sta v vmesnem stanju in praktično ne delujeta, vendar lahko služita kot dobro izhodišče;
PHP: povezava - ni preveč popoln in ne vključuje najnovejših sprememb API-ja, vendar poznam projekte, ki ga uporabljajo.
Z izjemo JavaScripta in Jave odjemalske knjižnice niso del samega izdelka Camunda. Ne pričakujte, da bodo podpirali vse funkcije Camunda REST API. Samo zato, ker knjižnica ne ponuja določene funkcije, še ne pomeni, da je ni, vedno preverite Camundin REST API. Referenčni projekti uporabljajo knjižnice kot izhodišče in predlogo.
Primer C#
Z uporabo zgornje odjemalske knjižnice lahko preprosto napišemo:
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", "..." }
});
Povsem delujočo izvorno kodo lahko najdete na spletu: povezava. Drug primer je na voljo na povezava.
Več informacij najdete na spletni strani. Github.com
Alternativni načini za lansiranje Camunde
Slika Dockerja po meri s »Camunda standalone WAR«
Kot alternativo vnaprej zgrajeni sliki Docker iz Camunde lahko sami pripravite Tomcat (na primer na podlagi uradnih slik Docker Tomcat) in nato kopirate Camundo vanjo kot eno od tako imenovanih datotek WAR.
Če imate veliko dodatnih zahtev in lahko nastavite gradbeno okolje Java, lahko nastavite tudi Camunda Standalone war. Nastavite gradnjo Maven kot v teh primerih: build Maven z vojno konfiguracijo ali montažo Maven s prekrivanjem.
Zagon distribucije Camunda Tomcat
Druga možnost je, da preprosto prenesete distribucijo Camunda Tomcat, jo razpakirate in zaženete. To zahteva le izvajalno okolje Java (JRE), ki je nameščeno na vašem računalniku. Lahko je enostavno prenesite od tukaj.
Če želite spremeniti bazo podatkov ali narediti kar koli drugega, morate Tomcat konfigurirati tako, kot je opisano v dokumentaciji. Vem, da se Tomcat morda sliši zapleteno, vendar je v resnici zelo preprosto. In Google pozna odgovore na vse, kar se lahko zahteva v procesu.
Zagon Camunde s Tomcatom
Zadnja možnost je, da sami nastavite Tomcat in vanj namestite Camundo, po opisu namestitve. To vam bo dalo možnost, da uporabite katero koli različico Tomcata, ki vam je ljubša, ali pa jo na primer namestite kot storitev Windows.
Lansiranje Camunde v proizvodnjo
To običajno zahteva nekaj končnih nastavitev za zagon Camunde. V Camundi obstajajo smernice, ki to zelo podrobno opisujejo, vendar se v tem članku ne bom spuščal vanje – navedel bom samo en primer: REST API distribucije ni privzeto konfiguriran za preverjanje pristnosti. Morda boste želeli to spremeniti.
Skratka-up
Kot lahko vidite, je zelo enostavno začeti uporabljati Camundo, ne glede na jezik, ki ga uporabljate. Ključna točka je, da vsa interakcija poteka prek API-ja REST. Tudi namestitev je precej enostavna, še posebej pri uporabi Dockerja.