Jeg diskuterer ofte mikroservicearkitektur med ikke-Java-folk: C#-udviklere, Node.JS/JavaScript-udviklere eller Golang-aficionados. Alle står de over for, at de har brug for en orkestreringsmekanisme i en mikroservicearkitektur eller blot et værktøj til at strømline arbejdsgangen og få mulighed for at bestille, håndtere timeouts, Saga og kompenserende transaktioner.
BPM platform med open source fra Camunda fantastisk til sådanne opgaver. Udviklervenlighed er en af produktets nøglefunktioner. Men hvis man ser på dens dokumentation, får man måske indtryk af, at Camundas "venlighed" hovedsageligt er rettet mod Java-udviklere. Platformen giver en masse muligheder for at forbinde dine egne funktioner og udvidelser, men det hele foregår i Java. Er det virkelig?
Ingen! Faktisk kan du nemt køre Camunda uden Java-kendskab og opsætte arkitekturen til kode på et hvilket som helst sprog efter eget valg. I denne artikel vil vi se på:
grundlæggende arkitektur;
REST API
rådgivning om eksisterende klientbiblioteker for andre sprog end Java;
eksempel ved hjælp af C# og Node.JS;
måder at starte Camunda-serveren på (Docker eller Tomcat).
arkitektur
Camunda er skrevet i Java og har brug for en Java Virtual Machine (JVM) for at køre. Camunda leverer en REST API, der giver dig mulighed for at skrive på ethvert sprog, du kan lide, og bruge REST med Camunda:
Arbejdsgange i Camunda er defineret i BPMN, som grundlæggende er en XML-fil. Den kan modelleres med Camunda Modeler.
At køre Camunda gennem et forudbygget Docker-billede
Den nemmeste måde at køre Camunda på er at bruge Docker. Alternative måder at starte Camunda på er beskrevet senere i denne artikel.
I dette tilfælde skal du blot køre:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Du behøver ikke bekymre dig om Linux, JVM'er eller Tomcats. Dockerfiler og grundlæggende dokumentation (for eksempel instruktioner til at oprette forbindelse til de nødvendige databaser) er tilgængelige på Github.
Hvis du vil køre Camunda Enterprise Edition, kan du nemt ændre Dockerfil.
At køre Camunda med Docker har dog én ulempe: du ender med en version af Tomcat, der ikke altid inkluderer de seneste rettelser. For at omgå dette kan du oprette dit eget Docker-billede baseret på den ønskede Tomcat-distribution, som vist i dette eksempel, eller bruge en af løsningerne beskrevet nedenfor.
Implementering af procesmodel
Lad os se på et eksempel ved at bruge Saga-skabelonen til en klassisk rejsebooking, hvor du vil udløse tre handlinger i træk og elegant kompensere for succesfulde handlinger i tilfælde af en senere fiasko. Repræsenteret i BPMN-form ser det sådan ud:
Nu kan du bruge REST API til procesmodelimplementering. Lad os sige, at du gemmer det som trip.bpmn og kører Camunda via Docker, så det er tilgængeligt på localhost:8080:
Det næste interessante spørgsmål er: hvordan kalder Camunda procedurer som at bestille en bil? Camunda kan ikke kun ringe til tjenester med det samme (Push-Principle) ved hjælp af nogle indbyggede stik, men også sætte arbejdsemner i en slags indbygget rækkefølge. Arbejderen kan derefter hente arbejdsemner via REST, udføre arbejdet og bede Camunda om at fuldføre (Pull-Principle).
Så først skal du udføre henteAndLock (fordi andre arbejdere kan modtage opgaver på samme tid for at skalere systemet):
Det var det - du har stadig ikke haft brug for noget Java, vel? Og det er nok til at komme i gang!
Klientbiblioteker
Det er nemt at kalde en REST API i ethvert programmeringssprog. I JavaScript gøres dette bekvemt ved hjælp af JQuery og i C# ved hjælp af System.Net.Http og Newtonsoft.Json. Men det vil tage tid. Så du kan bare bruge et eller andet klientbibliotek.
I øjeblikket er flere færdige klientbiblioteker tilgængelige:
C #:link и link. Begge disse projekter er i en mellemtilstand og praktisk talt i dvale, men kan tjene som et godt udgangspunkt;
PHP: link - ikke for komplet og inkluderer ikke de seneste API-ændringer, men jeg kender projekter, der bruger det.
Med undtagelse af JavaScript og Java er klientbibliotekerne ikke en del af selve Camunda-produktet. Forvent ikke, at de understøtter alle Camundas REST API-funktioner. Bare fordi et bibliotek ikke tilbyder en bestemt funktion, betyder det ikke, at det ikke er der, tjek altid Camundas REST API. Referenceprojekter bruger biblioteker som udgangspunkt og skabelon.
C# eksempel
Ved at bruge ovenstående klientbibliotek kan vi blot skrive:
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", "..." }
});
Den fuldt fungerende kildekode kan findes online: link. Et andet eksempel findes på link.
Mere information kan findes på hjemmesiden github.com
Alternative måder at lancere Camunda på
Brugerdefineret Docker-billede med "Camunda standalone WAR"
Som et alternativ til et forudbygget Docker-billede fra Camunda kan du selv forberede Tomcat (f.eks. baseret på de officielle Docker Tomcat-billeder) og derefter kopiere Camunda ind i det som en af de såkaldte WAR-filer.
Hvis du har mange yderligere krav og kan opsætte et Java-byggemiljø, kan du også opsætte Camunda Standalone war. Opsæt en Maven-bygning som i disse eksempler: build Maven med krigskonfiguration eller montering Maven med Overlay.
Starter Camunda Tomcat-distributionen
En anden mulighed er blot at downloade Camunda Tomcat-distributionen, pakke den ud og køre den. Dette kræver kun Java Runtime Environment (JRE) installeret på din computer. Det kan være nemt download herfra.
For at ændre databasen eller gøre noget andet, skal du konfigurere Tomcat som beskrevet i dokumentationen. Jeg ved, at Tomcat kan lyde kompliceret, men det er faktisk meget enkelt. Og Google kender svarene på alt, hvad der kan kræves i processen.
Kører Camunda ved hjælp af Tomcat
Det sidste alternativ er at konfigurere Tomcat selv og installere Camunda i den, efter installationsbeskrivelsen. Dette vil give dig mulighed for at bruge den version af Tomcat, du foretrækker, eller installere den som en Windows-tjeneste, for eksempel.
Lancering af Camunda i produktion
Dette vil normalt kræve en endelig opsætning for at køre Camunda. Der er retningslinjer i Camunda, som beskriver dette meget detaljeret, men jeg vil ikke komme ind på dem i denne artikel – jeg vil kun nævne ét eksempel: distributionens REST API er ikke konfigureret til godkendelse som standard. Du ønsker måske at ændre dette.
Opsummering
Som du kan se, er det meget nemt at komme i gang med Camunda, uanset hvilket sprog du bruger. Nøglepunktet er, at al interaktion sker gennem REST API. Installationen er også ret nem, især når du bruger Docker.