Keskustelen usein mikropalveluarkkitehtuurista muiden kuin Java-käyttäjien kanssa: C#-kehittäjien, Node.JS/JavaScript-kehittäjien tai Golangin harrastajien kanssa. He kaikki kohtaavat sen tosiasian, että he tarvitsevat mikropalveluarkkitehtuuriin orkestrointimekanismin tai vain työkalun työnkulun virtaviivaistamiseen ja kykyyn tilata, käsitellä aikakatkaisuja, Sagaa ja kompensaatiotapahtumia.
BPM-alustalla avoin lähdekoodi Camundalta loistava sellaisiin tehtäviin. Kehittäjäystävällisyys on yksi tuotteen tärkeimmistä ominaisuuksista. Mutta jos katsot sen dokumentaatiota, saatat saada vaikutelman, että Camundan "ystävällisyys" on suunnattu pääasiassa Java-kehittäjille. Alusta tarjoaa paljon vaihtoehtoja omien toimintojesi ja laajennuksien yhdistämiseen, mutta kaikki tehdään Javalla. Onko se todella?
Ei! Itse asiassa voit helposti käyttää Camundaa ilman Java-tietoa ja määrittää arkkitehtuurin koodille millä tahansa valitsemallasi kielellä. Tässä artikkelissa tarkastelemme:
perusarkkitehtuuri;
REST API
neuvonta olemassa olevista asiakaskirjastoista muille kielille kuin Javalle;
esimerkkinä C# ja Node.JS;
tapoja käynnistää Camunda-palvelin (Docker tai Tomcat).
Arkkitehtuuri
Camunda on kirjoitettu Java-kielellä ja tarvitsee Java Virtual Machinen (JVM) toimiakseen. Camunda tarjoaa REST-sovellusliittymän, jonka avulla voit kirjoittaa millä tahansa kielellä ja käyttää RESTiä Camundan kanssa:
Camundan työnkulut määritellään BPMN:ssä, joka on periaatteessa XML-tiedosto. Sitä voidaan mallintaa Camunda mallintaja.
Camundan käyttäminen valmiiksi rakennetun Docker-kuvan läpi
Helpoin tapa käyttää Camundaa on käyttää Dockeria. Vaihtoehtoisia tapoja käynnistää Camunda kuvataan myöhemmin tässä artikkelissa.
Suorita tässä tapauksessa:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Sinun ei tarvitse huolehtia Linuxista, JVM:istä tai Tomcateista. Docker-tiedostot ja perusdokumentaatio (esimerkiksi ohjeet tarvittaviin tietokantoihin yhdistämisestä) ovat saatavilla osoitteessa Github.
Jos haluat käyttää Camunda Enterprise Editionia, voit vaihtaa sen helposti Dockerfile.
Camundan käyttämisessä Dockerin kanssa on kuitenkin yksi haittapuoli: päädyt Tomcat-versioon, joka ei aina sisällä uusimpia korjauksia. Voit kiertää tämän luomalla oman Docker-kuvan halutun Tomcat-jakelun perusteella, kuten tässä esimerkissä näytetään, tai käyttämällä jotakin alla kuvatuista ratkaisuista.
Prosessimallin käyttöönotto
Katsotaanpa esimerkkiä Saga-mallin käyttämisestä klassiseen matkavaraukseen, jossa haluat käynnistää kolme toimintoa peräkkäin ja kompensoida sulavasti onnistuneesti suoritetut toiminnot myöhemmän epäonnistumisen varalta. Esitettynä BPMN-muodossa, se näyttää tältä:
Nyt voit käyttää REST API prosessimallin käyttöönottoa varten. Oletetaan, että tallennat sen nimellä trip.bpmn ja käytät Camundaa Dockerin kautta, jotta se on saatavilla localhostissa:8080:
Seuraava mielenkiintoinen kysymys on: miten Camunda kutsuu prosesseja kuten auton varaamisen? Camunda ei voi vain soittaa palveluun välittömästi (Push-Principle) jollakin sisäänrakennetulla liittimet, mutta myös laittaa työtavarat eräänlaiseen sisäänrakennettuun järjestykseen. Työntekijä voi sitten noutaa työkohteet REST:n kautta, suorittaa työn ja käskeä Camundan suorittamaan sen loppuun (Pull-Principle).
Joten ensin sinun on suoritettava fetchAndLock (koska muut työntekijät voivat vastaanottaa tehtäviä samaan aikaan järjestelmän skaalaamiseksi):
Siinä se - et vieläkään ole tarvinnut Javaa, eikö niin? Ja se riittää alkuun!
Asiakaskirjastot
REST API:n kutsuminen on helppoa millä tahansa ohjelmointikielellä. JavaScriptissä tämä tehdään kätevästi JQueryllä ja C#:ssa System.Net.Http:llä ja Newtonsoft.Jsonilla. Mutta tämä vie aikaa. Joten voit vain käyttää jotain asiakaskirjastoa.
Tällä hetkellä saatavilla on useita valmiita asiakaskirjastoja:
C #:linkki и linkki. Molemmat hankkeet ovat välivaiheessa ja käytännössä lepotilassa, mutta voivat toimia hyvänä lähtökohtana;
PHP: linkki - ei liian täydellinen eikä sisällä uusimpia API-muutoksia, mutta tiedän projekteja, jotka käyttävät sitä.
JavaScriptiä ja Javaa lukuun ottamatta asiakaskirjastot eivät kuulu itse Camunda-tuotteeseen. Älä odota niiden tukevan kaikkia Camundan REST API -ominaisuuksia. Se, että kirjasto ei tarjoa tiettyä toimintoa, ei tarkoita, että sitä ei olisi olemassa, tarkista aina Camundan REST API. Viiteprojektit käyttävät kirjastoja lähtökohtana ja mallina.
C# esimerkki
Yllä olevaa asiakaskirjastoa käyttämällä voimme yksinkertaisesti kirjoittaa:
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", "..." }
});
Täysin toimiva lähdekoodi löytyy verkosta: linkki. Toinen esimerkki löytyy osoitteesta linkki.
Mukautettu Docker-kuva, jossa on "Camunda standalone WAR"
Vaihtoehtona valmiiksi rakennetulle Docker-kuvalle Camundasta voit valmistaa Tomcatin itse (esimerkiksi virallisten Docker Tomcat -kuvien perusteella) ja sitten kopioida Camundan siihen yhdeksi niin sanotuista WAR-tiedostoista.
Jos sinulla on monia lisävaatimuksia ja voit määrittää Java-rakennusympäristön, voit myös määrittää Camunda Standalone war -sovelluksen. Aseta Maven-koontiversio kuten näissä esimerkeissä: build Maven war config tai kokoonpano Maven peitolla.
Aloitetaan Camunda Tomcat -jakelu
Toinen vaihtoehto on yksinkertaisesti ladata Camunda Tomcat -jakelu, purkaa se ja suorittaa se. Tämä vaatii vain Java Runtime Environment (JRE) -ympäristön, joka on asennettu tietokoneeseen. Se voi olla helposti lataa täältä.
Jotta voit muuttaa tietokantaa tai tehdä jotain muuta, sinun on määritettävä Tomcat kuten kuvattu dokumentaatiossa. Tiedän, että Tomcat saattaa kuulostaa monimutkaiselta, mutta se on itse asiassa hyvin yksinkertainen. Ja Google tietää vastaukset kaikkeen, mitä prosessissa voidaan tarvita.
Camundan ajaminen Tomcatilla
Viimeinen vaihtoehto on asentaa Tomcat itse ja asentaa siihen Camunda, asennuskuvauksen mukaisesti. Tämä antaa sinulle mahdollisuuden käyttää haluamaasi Tomcat-versiota tai asentaa sen esimerkiksi Windows-palveluna.
Camundan tuotanto käynnistyy
Tämä vaatii yleensä joitain lopullisia asetuksia Camundan käyttämiseksi. Camundassa on ohjeita, jotka kuvaavat tätä erittäin yksityiskohtaisesti, mutta en käsittele niitä tässä artikkelissa - mainitsen vain yhden esimerkin: jakelun REST API ei ole oletusarvoisesti määritetty todennusta varten. Haluat ehkä muuttaa tätä.
Tiivistelmäraportteja
Kuten näet, Camundan käytön aloittaminen on erittäin helppoa käyttämästäsi kielestä riippumatta. Tärkeintä on, että kaikki vuorovaikutus tapahtuu REST API:n kautta. Asennus on myös melko helppoa, varsinkin kun käytät Dockeria.