Često raspravljam o arhitekturi mikroservisa s ljudima koji ne poznaju Javu: C# programerima, Node.JS/JavaScript programerima ili ljubiteljima Golanga. Svi su oni suočeni s činjenicom da im je potreban mehanizam orkestracije u mikroservisnoj arhitekturi ili samo alat za pojednostavljenje tijeka rada i stjecanje mogućnosti naručivanja, rukovanja vremenskim ograničenjima, Saga i kompenzacijskim transakcijama.
BPM platforma sa open source iz Camunde super za takve zadatke. Pogodnost programera jedna je od ključnih značajki proizvoda. Ali ako pogledate njezinu dokumentaciju, mogli biste steći dojam da je Camundina "prijateljski raspoloženost" uglavnom usmjerena na Java programere. Platforma pruža mnogo mogućnosti za povezivanje vlastitih funkcija i ekstenzija, ali sve se radi u Javi. Je li stvarno?
Ne! Zapravo, možete jednostavno pokrenuti Camundu bez ikakvog znanja o Javi i postaviti arhitekturu za kod na bilo kojem jeziku po vašem izboru. U ovom ćemo članku pogledati:
osnovna arhitektura;
REST API
savjetovanje o postojećim klijentskim bibliotekama za jezike koji nisu Java;
primjer korištenja C# i Node.JS;
načini pokretanja Camunda poslužitelja (Docker ili Tomcat).
arhitektura
Camunda je napisana u Javi i za rad joj je potreban Java Virtual Machine (JVM). Camunda pruža REST API koji vam omogućuje pisanje na bilo kojem jeziku koji želite i korištenje REST-a s Camundom:
Tijek rada u Camundi definiran je u BPMN-u, koji je u osnovi XML datoteka. Može se modelirati s Modelar Camunda.
Pokretanje Camunde kroz unaprijed izgrađenu Docker sliku
Najlakši način za pokretanje Camunde je korištenje Dockera. Alternativni načini pokretanja Camunde opisani su kasnije u ovom članku.
U ovom slučaju jednostavno pokrenite:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Ne morate brinuti o Linuxu, JVM-ovima ili Tomcatsima. Docker datoteke i osnovna dokumentacija (na primjer, upute za povezivanje s potrebnim bazama podataka) dostupni su na Github.
Ako želite pokrenuti Camunda Enterprise Edition, to možete jednostavno promijeniti dockerfile.
Međutim, pokretanje Camunde s Dockerom ima jednu lošu stranu: završit ćete s verzijom Tomcata koja ne uključuje uvijek najnovije popravke. Da biste to zaobišli, možete izraditi vlastitu Docker sliku na temelju željene Tomcat distribucije, kao što je prikazano u ovom primjeru, ili upotrijebiti jedno od rješenja opisanih u nastavku.
Implementacija modela procesa
Pogledajmo primjer korištenja Saga predloška za klasičnu rezervaciju putovanja gdje želite pokrenuti tri akcije zaredom i elegantno nadoknaditi uspješno dovršene radnje u slučaju kasnijeg neuspjeha. Predstavljeno u BPMN obliku, izgleda ovako:
Sada možete koristiti REST API za implementaciju modela procesa. Recimo da ga spremite kao trip.bpmn i pokrenete Camundu preko Dockera tako da bude dostupan na localhost:8080:
Sljedeće zanimljivo pitanje je: kako Camunda naziva procedure poput rezervacije automobila? Camunda ne može samo odmah pozivati usluge (Push-princip) koristeći neke ugrađene konektori, ali i staviti radne predmete u neku vrstu ugrađenog reda. Radnik tada može dohvatiti radne stavke putem REST-a, obaviti posao i reći Camundi da dovrši (princip povlačenja).
Dakle, prvo morate izvršiti dohvatiIzaključaj (jer drugi radnici mogu primati zadatke u isto vrijeme za skaliranje sustava):
To je to - još uvijek vam nije trebala Java, zar ne? I to je dovoljno za početak!
Knjižnice klijenata
Pozivanje REST API-ja jednostavno je u bilo kojem programskom jeziku. U JavaScriptu se to praktično radi pomoću JQueryja, a u C# pomoću System.Net.Http i Newtonsoft.Json. Ali ovo će potrajati. Dakle, možete jednostavno koristiti neku klijentsku biblioteku.
Trenutno je dostupno nekoliko gotovih knjižnica klijenata:
C #:link и link. Oba ova projekta su u srednjem stanju i praktički miruju, ali mogu poslužiti kao dobra polazna točka;
PHP: link - nije previše potpun i ne uključuje najnovije promjene API-ja, ali znam projekte koji ga koriste.
Uz izuzetak JavaScripta i Jave, klijentske biblioteke nisu dio samog Camunda proizvoda. Ne očekujte da podržavaju sve Camunda REST API značajke. Samo zato što biblioteka ne pruža određenu funkciju ne znači da je nema, uvijek provjerite Camundin REST API. Referentni projekti koriste knjižnice kao polazište i predložak.
C# primjer
Koristeći gornju biblioteku klijenta, možemo jednostavno napisati:
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", "..." }
});
Potpuno radni izvorni kod može se pronaći na internetu: link. Još jedan primjer dostupan je na link.
Više informacija možete pronaći na web stranici github.com
Alternativni načini za pokretanje Camunde
Prilagođena Docker slika s "Camunda standalone WAR"
Kao alternativu unaprijed izgrađenoj Docker slici iz Camunde, možete sami pripremiti Tomcat (na primjer, na temelju službenih Docker Tomcat slika) i zatim kopirati Camundu u nju kao jednu od takozvanih WAR datoteka.
Ako imate mnogo dodatnih zahtjeva i možete postaviti Java okruženje za izgradnju, također možete postaviti Camunda Standalone war. Postavite Maven build kao u ovim primjerima: build Maven s ratnom konfiguracijom odnosno montaža Maven s prekrivanjem.
Pokretanje distribucije Camunda Tomcat
Druga mogućnost je jednostavno preuzeti distribuciju Camunda Tomcat, raspakirati je i pokrenuti. Ovo zahtijeva samo Java Runtime Environment (JRE) instaliranu na vašem računalu. Može se lako preuzmi odavde.
Kako biste promijenili bazu podataka ili učinili bilo što drugo, trebate konfigurirati Tomcat kao opisano u dokumentaciji. Znam da Tomcat može zvučati komplicirano, ali zapravo je vrlo jednostavan. A Google zna odgovore na sve što može biti potrebno u procesu.
Pokretanje Camunde pomoću Tomcata
Zadnja alternativa je da sami postavite Tomcat i u njega instalirate Camundu, slijedeći opis instalacije. To će vam dati mogućnost da koristite bilo koju verziju Tomcata koju želite ili da ga instalirate kao Windows uslugu, na primjer.
Puštanje Camunde u proizvodnju
Ovo će obično zahtijevati završno podešavanje za pokretanje Camunde. Postoje smjernice u Camundi koje to opisuju vrlo detaljno, ali neću ulaziti u njih u ovom članku - navest ću samo jedan primjer: REST API distribucije nije konfiguriran za autentifikaciju prema zadanim postavkama. Možda biste željeli ovo promijeniti.
Zaključak-up
Kao što vidite, vrlo je lako započeti s Camundom, bez obzira na jezik koji koristite. Ključna stvar je da se sva interakcija odvija kroz REST API. Instalacija je također prilično jednostavna, posebno kada koristite Docker.