Camunda kasutamine lihtsaks orkestreerimiseks, mis põhineb REST-il ja töövoomootoril (Java puudub)

Tere Habr! Esitan teie tähelepanu artikli tõlkele "Kasutage Camundat lihtsalt kasutatava REST-põhise orkestreerimis- ja töövoomootorina (Javat puudutamata)" autor Bernd Rücker.

07.07.2020, tõlge artiklid Bernd Rucker

Camunda kasutamine lihtsaks orkestreerimiseks, mis põhineb REST-il ja töövoomootoril (Java puudub)

Arutan sageli mikroteenuste arhitektuuri üle mitte-Java inimestega: C# arendajad, Node.JS/JavaScripti arendajad või Golangi austajad. Kõik nad seisavad silmitsi tõsiasjaga, et neil on vaja mikroteenuse arhitektuuris orkestreerimismehhanismi või lihtsalt tööriista töövoo sujuvamaks muutmiseks ja võimaluse hankimiseks tellida, käsitleda ajalõppe, saaga ja kompenseerivaid tehinguid.

BPM platvorm koos avatud lähtekoodiga Camundast suurepärane selliste ülesannete jaoks. Arendajasõbralikkus on toote üks põhiomadusi. Kuid kui vaadata selle dokumentatsiooni, võib jääda mulje, et Camunda "sõbralikkus" on suunatud peamiselt Java arendajatele. Platvorm pakub palju võimalusi oma funktsioonide ja laienduste ühendamiseks, kuid see kõik on tehtud Javas. Kas tõesti?

Ei! Tegelikult on Camundat lihtne käivitada ilma Java-teadmisteta ja seadistada koodiarhitektuur mis tahes teie valitud keeles. Selles artiklis vaatleme:

  • põhiarhitektuur;
  • REST API
  • nõustamine olemasolevate klienditeekide kohta muudes keeltes peale Java;
  • näiteks kasutades C# ja Node.JS;
  • Camunda serveri käivitamise viisid (Docker või Tomcat).

arhitektuur

Camunda on kirjutatud Java keeles ja vajab käitamiseks Java virtuaalmasinat (JVM). Camunda pakub REST API-t, mis võimaldab teil kirjutada mis tahes teile meeldivas keeles ja kasutada koos Camundaga REST-i:

Camunda kasutamine lihtsaks orkestreerimiseks, mis põhineb REST-il ja töövoomootoril (Java puudub)

Camunda töövood on määratletud BPMN-is, mis on põhimõtteliselt XML-fail. Seda saab modelleerida Camunda modelleerija.

Camunda käivitamine eelehitatud Dockeri pildi kaudu

Lihtsaim viis Camunda käivitamiseks on kasutada Dockerit. Alternatiivseid viise Camunda käivitamiseks kirjeldatakse käesolevas artiklis hiljem.

Camunda kasutamine lihtsaks orkestreerimiseks, mis põhineb REST-il ja töövoomootoril (Java puudub)

Sel juhul käivitage lihtsalt:

  docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest

Te ei pea muretsema Linuxi, JVM-ide ega Tomcatside pärast. Dockeri failid ja põhidokumentatsioon (näiteks juhised vajalike andmebaasidega ühenduse loomiseks) on saadaval aadressil Github.

Kui soovite käivitada Camunda Enterprise Editioni, saate seda hõlpsalt muuta dockerfile.

Camunda käitamisel Dockeriga on aga üks negatiivne külg: saate lõpuks Tomcati versiooni, mis ei sisalda alati uusimaid parandusi. Selle probleemi lahendamiseks saate soovitud Tomcati jaotuse põhjal luua oma Dockeri pildi, nagu on näidatud selles näites, või kasutada ühte allpool kirjeldatud lahendustest.

Protsessimudeli juurutamine

Vaatame näidet Saga malli kasutamisest klassikalise reisibroneeringu jaoks, kus soovite käivitada kolm toimingut järjest ja kompenseerida hilisema ebaõnnestumise korral edukalt sooritatud toiminguid. Esindatud BPMN-vormingus näeb see välja järgmine:

Camunda kasutamine lihtsaks orkestreerimiseks, mis põhineb REST-il ja töövoomootoril (Java puudub)

Nüüd saate kasutada REST API protsessimudeli juurutamiseks. Oletame, et salvestate selle nimega trip.bpmn ja käivitate Camunda Dockeri kaudu, et see oleks saadaval saidil localhost:8080:

  curl -w "n" 
-H "Accept: application/json" 
-F "deployment-name=trip" 
-F "enable-duplicate-filtering=true" 
-F "deploy-changed-only=true" 
-F "[email protected]" 
http://localhost:8080/engine-rest/deployment/creat

Nüüd saate joosta uued töövoo eksemplarid kasutades REST API-t ja edastada andmed, mida soovite näha töövoo eksemplari muutujatena:

  curl 
-H "Content-Type: application/json" 
-X POST 
-d '{"variables":{"someData" : {"value" : "someValue", "type": "String"}},"businessKey" : "12345"}}' 
http://localhost:8080/engine-rest/<!-- -->process-definition/key/<!-- -->FlowingTripBookingSaga<!-- -->/start

Järgmine huvitav küsimus on: kuidas korraldab Camunda selliseid protseduure nagu auto broneerimine? Camunda ei saa mõnda sisseehitatud seadet kasutades mitte ainult kohe teenustele helistada (Push-Principle). pistikud, aga ka tööasjad omamoodi sisseehitatud järjekorda seadma. Seejärel saab töötaja REST-i kaudu tööesemeid tuua, töö ära teha ja käskida Camundal lõpetada (tõmbepõhimõte).

Camunda kasutamine lihtsaks orkestreerimiseks, mis põhineb REST-il ja töövoomootoril (Java puudub)

Nii et kõigepealt peate täitma too AndLock (kuna teised töötajad saavad süsteemi skaleerimiseks samal ajal ülesandeid vastu võtta):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123","maxTasks":1,"usePriority":true,"topics":[{"topicName": "reserve-car"}, "lockDuration": 10000, "variables": ["someData"]}]}'<!-- --> 
http://localhost:8080/engine-rest/external-task/fetchAndLock

Siis ütle seda Camundale töötaja lõpetas töö (pange tähele, et peate sisestama esimeses päringus saadud välise ülesande ID):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123", "variables": {}}'<!-- --> 
http://localhost:8080/engine-rest/<!-- -->external-task/EXTERNAL_TASK_ID/complete

See on kõik – sa pole ikka veel Java-d vajanud, eks? Ja sellest piisab alustamiseks!

Klientide raamatukogud

REST API kutsumine on lihtne mis tahes programmeerimiskeeles. JavaScriptis saab seda mugavalt teha JQuery abil ning C#-s System.Net.Http ja Newtonsoft.Json abil. Kuid see võtab aega. Nii et saate lihtsalt mõnda klienditeeki kasutada.

Hetkel on saadaval mitmed valmis klienditeegid:

  • javascript: link. Toetab Camunda;
  • Java: link. Toetab Camunda;
  • C #:link и link. Mõlemad projektid on vahepealses olekus ja praktiliselt seisavad, kuid võivad olla hea lähtepunkt;
  • PHP: link - mitte liiga täielik ja ei sisalda uusimaid API muudatusi, kuid tean projekte, mis seda kasutavad.

Klienditeegid ei kuulu Camunda toote enda hulka, välja arvatud JavaScript ja Java. Ärge oodake, et nad toetaksid kõiki Camunda REST API funktsioone. See, et teek ei paku teatud funktsiooni, ei tähenda, et seda seal pole, kontrollige alati Camunda REST API-t. Võrdlusprojektid kasutavad teeke lähtepunktina ja mallina.

C# näide

Kasutades ülaltoodud klienditeeki, saame lihtsalt kirjutada:

  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äielikult töötava lähtekoodi leiate Internetist: link. Teine näide on saadaval aadressil link.

Näide rakendusega Node.js

  var Workers = require('camunda-worker-node');
  var workers = Workers('http://localhost:8080/engine-rest', {
    workerId: 'some-worker-id'
  });
  
  workers.registerWorker('reserve-car', [ 'someData' ], function(context, callback) {
    var someNewData = context.variables.someData + " - added something";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

Rohkem infot leiab kodulehelt Github.com

Alternatiivsed viisid Camunda käivitamiseks

Kohandatud Dockeri pilt koos "Camunda standalone WARiga"

Alternatiivina Camundast valmis ehitatud Dockeri pildile saab Tomcati ise ette valmistada (näiteks ametlike Docker Tomcati piltide põhjal) ja seejärel Camunda sinna sisse kopeerida ühe nn WAR-failina.

Camunda kasutamine lihtsaks orkestreerimiseks, mis põhineb REST-il ja töövoomootoril (Java puudub)

Kui teil on palju lisanõudeid ja saate seadistada Java ehituskeskkonna, saate seadistada ka Camunda Standalone war. Seadistage Maveni järg nagu nendes näidetes: ehita Maven sõja konfiguratsiooniga või kokkupanek Maven koos ülekattega.

Camunda Tomcati levitamise käivitamine

Teine võimalus on lihtsalt alla laadida Camunda Tomcati distributsioon, see lahti pakkida ja käivitada. Selleks on vaja ainult teie arvutisse installitud Java Runtime Environment (JRE). See võib olla lihtne laadige alla siit.

Camunda kasutamine lihtsaks orkestreerimiseks, mis põhineb REST-il ja töövoomootoril (Java puudub)

Andmebaasi muutmiseks või millegi muuks tegemiseks peate Tomcati moodi konfigureerima dokumentatsioonis kirjeldatud. Ma tean, et Tomcat võib tunduda keeruline, kuid tegelikult on see väga lihtne. Ja Google teab vastuseid kõigele, mida protsessis vaja võib minna.

Camunda käivitamine Tomcati abil

Viimane võimalus on Tomcat ise seadistada ja Camunda sinna installida, järgides paigalduskirjeldust. See annab teile võimaluse kasutada soovitud Tomcati versiooni või installida see näiteks Windowsi teenusena.

Camunda tootmisse käivitamine

Tavaliselt nõuab see Camunda käitamiseks lõplikku seadistust. Camundas on juhiseid, mis kirjeldavad seda väga üksikasjalikult, kuid ma ei hakka neid selles artiklis käsitlema – toon vaid ühe näite: distributsiooni REST API ei ole vaikimisi autentimiseks seadistatud. Võib-olla soovite seda muuta.

Lõppkokkuvõte

Nagu näete, on Camundaga alustamine väga lihtne, olenemata kasutatavast keelest. Põhipunkt on see, et kogu suhtlus toimub REST API kaudu. Ka installimine on üsna lihtne, eriti Dockeri kasutamisel.

Allikas: www.habr.com

Lisa kommentaar