Spessu discute l'architettura di microservizi cù e persone chì ùn sò micca Java: sviluppatori C#, sviluppatori Node.JS/JavaScript, o aficionados Golang. Tutti sò affruntatu cù u fattu chì anu bisognu di un mecanismu d'orchestrazione in una architettura di microserviziu, o solu un strumentu per simplificà u flussu di travagliu è acquistà a capacità di ordine, manighjà timeouts, Saga è transazzione cumpensu.
piattaforma BPM cun open source da Camunda grande per tali compiti. L'amicizia di u sviluppatore hè una di e caratteristiche chjave di u pruduttu. Ma s'è guardate a so ducumentazione, pudete avè l'impressione chì a "amichevolezza" di Camunda hè principalmente destinata à i sviluppatori Java. A piattaforma furnisce assai opzioni per cunnette e vostre funzioni è estensioni, ma tuttu hè fattu in Java. Hè veramente?
Innò! In fatti, pudete facilmente eseguisce Camunda senza alcuna cunniscenza di Java è stabilisce l'architettura per u codice in ogni lingua di a vostra scelta. In questu articulu, guardemu:
architettura basica;
API REST
cunsiglii nantu à e biblioteche client esistenti per lingue diverse da Java;
esempiu cù C# è Node.JS;
modi per inizià u servitore Camunda (Docker o Tomcat).
architettura
Camunda hè scrittu in Java è hà bisognu di una Java Virtual Machine (JVM) per eseguisce. Camunda furnisce una API REST chì permette di scrive in ogni lingua chì ti piace è aduprà REST cù Camunda:
I flussi di travagliu in Camunda sò definiti in BPMN, chì hè basicamente un schedariu XML. Pò esse modellatu cù Camunda Modeler.
Eseguisce Camunda attraversu una maghjina Docker pre-custruita
U modu più faciule per eseguisce Camunda hè di utilizà Docker. Modi alternattivi per lancià Camunda sò descritti più tardi in questu articulu.
In questu casu, basta à eseguisce:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Ùn avete micca preoccupatu di Linux, JVMs o Tomcats. Dockerfiles è documentazione basica (per esempiu, struzzioni per cunnette à e basa di dati necessarii) sò dispunibili à Github.
Se vulete eseguisce Camunda Enterprise Edition, pudete facilmente cambià dockerfile.
Tuttavia, l'esecuzione di Camunda cù Docker hà un inconveniente: finisci cù una versione di Tomcat chì ùn include micca sempre l'ultime correzioni. Per travaglià intornu à questu, pudete creà a vostra propria maghjina Docker basatu nantu à a distribuzione Tomcat desiderata, cum'è mostra in questu esempiu, o utilizate una di e soluzioni descritte quì sottu.
Impiegazione di u mudellu di prucessu
Fighjemu un esempiu utilizendu u mudellu Saga per una riservazione di viaghju classica induve vulete attivà trè azzioni in una fila è cumpensà graziosamente l'azzioni cumpletu cù successu in casu di un fallimentu dopu. Rapprisintatu in forma BPMN, pare cusì:
Avà pudete curriri novi istanze di flussu di travagliu usendu l'API REST è trasmette i dati chì vulete vede cum'è variabili di istanza di flussu di travagliu:
A prossima quistione interessante hè: cumu si chjama Camunda prucedure cum'è a riservazione di una vittura? Camunda ùn pò micca solu chjamà i servizii immediatamente (Push-Principle) cù qualchì integratu connettori, ma ancu mette l'articuli di u travagliu in un tipu d'ordine integratu. U travagliadore pò allora piglià l'articuli di u travagliu via REST, eseguisce u travagliu, è dì à Camunda per compie (Pull-Principle).
Allora prima avete bisognu di eseguisce fetchAndLock (perchè altri travagliadori ponu riceve compiti à u stessu tempu per scala u sistema):
Hè questu - ùn avete ancu bisognu di Java, nò? È basta à principià !
Biblioteche Clienti
Chjamà una API REST hè faciule in ogni lingua di prugrammazione. In JavaScript, questu hè convenientemente fattu cù JQuery, è in C#, cù System.Net.Http è Newtonsoft.Json. Ma questu duverà tempu. Cusì pudete solu aduprà una libreria cliente.
À u mumentu, parechje biblioteche di clientele pronte sò dispunibili:
C #:ссылка и ссылка. I dui prughjetti sò in un statu intermediu è praticamenti dorme, ma ponu serve com'è un bonu puntu di partenza;
PHP: ссылка - micca troppu cumpletu è ùn include micca l'ultimi cambiamenti API, ma cunnoscu prughjetti chì l'utilizanu.
Cù l'eccezzioni di JavaScript è Java, e biblioteche di u cliente ùn sò micca parte di u pruduttu Camunda stessu. Ùn aspettate micca chì sustene tutte e funzioni di l'API REST di Camunda. Solu perchè una biblioteca ùn furnisce micca una certa funzione ùn significa micca chì ùn hè micca quì, verificate sempre l'API REST di Camunda. I prughjetti di riferimentu utilizanu biblioteche cum'è puntu di partenza è mudellu.
C# esempiu
Utilizendu a libreria di u cliente sopra, pudemu simpricimenti scrive:
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", "..." }
});
U codice fonte cumplettamente funzionante pò esse truvatu in linea: ссылка. Un altru esempiu hè dispunibule à ссылка.
Cum'è una alternativa à una maghjina Docker pre-custruita da Camunda, pudete preparà Tomcat stessu (per esempiu, basatu annantu à l'imaghjini ufficiali di Docker Tomcat) è poi copià Camunda in questu cum'è unu di i chjamati schedarii WAR.
Sì avete parechje esigenze supplementari è pudete stabilisce un ambiente di creazione Java, pudete ancu stabilisce a guerra Camunda Standalone. Configurate un Maven build cum'è in questi esempi: build Maven cù a cunfigurazione di guerra o assemblea Maven cù Overlay.
Cumincià a distribuzione Camunda Tomcat
Un'altra opzione hè di scaricà simpricimenti a distribuzione Camunda Tomcat, unzip it, and run it. Questu hè solu bisognu di u Java Runtime Environment (JRE) installatu in u vostru urdinatore. Pò esse facilmente scaricate da quì.
Per cambià a basa di dati o fà qualsiasi altra cosa avete bisognu di cunfigurà Tomcat like descrittu in a documentazione. Sapemu chì Tomcat pò sembra complicatu, ma in realtà hè assai simplice. E Google cunnosce e risposte à tuttu ciò chì pò esse dumandatu in u prucessu.
Esecuzione di Camunda cù Tomcat
L'ultima alternativa hè di cunfigurà Tomcat sè stessu è stallà Camunda in questu, seguitu a descrizzione di l'installazione. Questu vi darà l'opzione di utilizà a versione di Tomcat chì preferite, o stallà cum'è un serviziu Windows, per esempiu.
Lanciamentu di Camunda in pruduzzione
Questu generalmente richiederà una certa configurazione finale per eseguisce Camunda. Ci sò linee guida in Camunda chì descrizanu questu in grande detail, ma ùn entreraghju micca in questu articulu - nome solu un esempiu: l'API REST di a distribuzione ùn hè micca cunfigurata per l'autentificazione per difettu. Pudete vulete cambià questu.
Riunione
Comu pudete vede, hè assai faciule di principià cù Camunda, indipendentemente da a lingua chì avete aduprà. U puntu chjave hè chì tutta l'interazzione hè fatta attraversu l'API REST. L'installazione hè ancu abbastanza faciule, soprattuttu quandu si usa Docker.