Notkun Camunda til að auðvelda skipulagningu byggða á REST og Workflow Engine (engin Java)

Hæ Habr! Ég kynni þér þýðingu greinarinnar "Notaðu Camunda sem auðveld í notkun REST-byggða hljómsveitar- og verkflæðisvél (án þess að snerta Java)" eftir Bernd Rücker

07.07.2020/XNUMX/XNUMX, þýðing Grein Bernd Rücker

Notkun Camunda til að auðvelda skipulagningu byggða á REST og Workflow Engine (engin Java)

Ég ræði oft örþjónustuarkitektúr við fólk sem ekki er Java: C# forritara, Node.JS/JavaScript forritara eða Golang áhugamenn. Allir standa þeir frammi fyrir þeirri staðreynd að þeir þurfa skipulagskerfi í örþjónustuarkitektúr, eða bara tæki til að hagræða verkflæðið og öðlast getu til að panta, sjá um tímamörk, Saga og bætur fyrir viðskipti.

BPM vettvangur með opinn uppspretta frá Camunda frábært fyrir svona verkefni. Hjálpleiki þróunaraðila er einn af lykileiginleikum vörunnar. En ef þú skoðar skjöl þess gætirðu fengið á tilfinninguna að „vingjarnleiki“ Camunda beinist aðallega að Java forriturum. Vettvangurinn býður upp á marga möguleika til að tengja eigin aðgerðir og viðbætur, en það er allt gert í Java. Er það virkilega?

Nei! Reyndar geturðu auðveldlega keyrt Camunda án nokkurrar Java-þekkingar og sett upp arkitektúrinn fyrir kóða á hvaða tungumáli sem þú velur. Í þessari grein munum við skoða:

  • grunnarkitektúr;
  • REST API
  • ráðgjöf um núverandi viðskiptavinasöfn fyrir önnur tungumál en Java;
  • dæmi með C# og Node.JS;
  • leiðir til að ræsa Camunda netþjóninn (Docker eða Tomcat).

arkitektúr

Camunda er skrifað í Java og þarf Java Virtual Machine (JVM) til að keyra. Camunda býður upp á REST API sem gerir þér kleift að skrifa á hvaða tungumáli sem þú vilt og nota REST með Camunda:

Notkun Camunda til að auðvelda skipulagningu byggða á REST og Workflow Engine (engin Java)

Verkflæði í Camunda eru skilgreind í BPMN, sem er í grundvallaratriðum XML skrá. Það er hægt að móta það með því að nota Camunda Modeler.

Að keyra Camunda í gegnum forbyggða Docker mynd

Auðveldasta leiðin til að keyra Camunda er að nota Docker. Aðrar leiðum til að ræsa Camunda er lýst síðar í þessari grein.

Notkun Camunda til að auðvelda skipulagningu byggða á REST og Workflow Engine (engin Java)

Í þessu tilviki skaltu einfaldlega keyra:

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

Þú þarft ekki að hafa áhyggjur af Linux, JVM eða Tomcats. Dockerskrár og grunnskjöl (til dæmis leiðbeiningar um tengingu við nauðsynlega gagnagrunna) eru fáanlegar á GitHub.

Ef þú vilt keyra Camunda Enterprise Edition geturðu auðveldlega breytt Dockerfil.

Hins vegar er einn galli við að keyra Camunda með Docker: þú endar með útgáfu af Tomcat sem inniheldur ekki alltaf nýjustu lagfæringarnar. Til að komast einhvern veginn í kringum þetta geturðu búið til Docker mynd sjálfur byggt á viðkomandi Tomcat dreifingu, eins og sýnt er í þessu dæmi, eða notað eina af lausnunum sem lýst er hér að neðan.

Uppsetning ferlislíkana

Við skulum skoða dæmi með því að nota Saga sniðmátið fyrir klassíska ferðabókun þar sem þú vilt kalla fram þrjár aðgerðir í röð og bæta þokkalega upp fyrir aðgerðir sem hafa verið kláraðar ef seinna meir. Táknað í BPMN formi lítur það svona út:

Notkun Camunda til að auðvelda skipulagningu byggða á REST og Workflow Engine (engin Java)

Nú geturðu notað REST API fyrir dreifingu vinnslulíkana. Segjum að þú vistir það sem trip.bpmn og keyrir Camunda í gegnum Docker svo það sé fáanlegt á 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ú geturðu hlaupið ný verkflæðistilvik með því að nota REST API og sendu gögnin sem þú vilt sjá sem tilviksbreytur verkflæðis:

  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

Næsta áhugaverða spurningin er: hvernig kallar Camunda verklag eins og að bóka bíl? Camunda getur ekki aðeins hringt í þjónustu strax (Push-Principle) með því að nota eitthvað innbyggt tengi, en einnig setja vinnuhluti í eins konar innbyggða röð. Starfsmaðurinn getur síðan sótt verkþætti í gegnum REST, framkvæmt verkið og sagt Camunda að klára (Pull-Principle).

Notkun Camunda til að auðvelda skipulagningu byggða á REST og Workflow Engine (engin Java)

Svo fyrst þarftu að framkvæma fetchAndLock (vegna þess að aðrir starfsmenn geta fengið verkefni á sama tíma til að stækka kerfið):

  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

Segðu þá Camunda það starfsmaður lauk verki (athugaðu að þú verður að slá inn ytri verkefnaauðkenni sem þú fékkst í fyrstu beiðni):

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

Það er það - þú hefur samt ekki þurft neina Java, ekki satt? Og það er nóg til að byrja!

Bókasöfn viðskiptavina

Auðvelt er að hringja í REST API á hvaða forritunarmáli sem er. Í JavaScript er þetta þægilega gert með JQuery, og í C#, með System.Net.Http og Newtonsoft.Json. En þetta mun taka tíma. Svo þú getur bara notað eitthvað viðskiptavinasafn.

Í augnablikinu eru nokkur tilbúin viðskiptavinasöfn í boði:

  • javascript: tengill. Stuðningur af Camunda;
  • Java: tengill. Stuðningur af Camunda;
  • C #:tengill и tengill. Bæði þessi verkefni eru í millibili og nánast í dvala, en geta verið góður upphafspunktur;
  • PHP: tengill er ekki mjög fullkomið bókasafn og inniheldur ekki nýjustu API breytingar, en ég veit um verkefni sem nota það.

Að undanskildum JavaScript og Java eru viðskiptavinasöfnin ekki hluti af Camunda vörunni sjálfri. Ekki búast við því að þeir styðji alla REST API eiginleika Camunda. Bara vegna þess að bókasafn býður ekki upp á ákveðna virkni þýðir það ekki að það sé ekki til staðar, athugaðu alltaf REST API Camunda. Tilvísunarverkefni nota bókasöfn sem upphafspunkt og sniðmát.

C# dæmi

Með því að nota ofangreint viðskiptavinasafn getum við einfaldlega skrifað:

  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", "..." }
    });

Fullvirkan frumkóðann er að finna á netinu: tengill. Annað dæmi er að finna á tengill.

Dæmi með 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();

Frekari upplýsingar má finna á heimasíðunni Github.com

Aðrar leiðir til að ræsa Camunda

Sérsniðin Docker mynd með „Camunda standalone WAR“

Sem valkostur við forsmíðaða Docker mynd frá Camunda geturðu útbúið Tomcat sjálfur (til dæmis byggt á opinberu Docker Tomcat myndunum) og síðan afritað Camunda inn í hana sem eina af svokölluðum WAR skrám.

Notkun Camunda til að auðvelda skipulagningu byggða á REST og Workflow Engine (engin Java)

Ef þú hefur margar viðbótarkröfur og getur sett upp Java byggingarumhverfi geturðu líka sett upp Camunda Standalone stríð. Settu upp Maven byggingu eins og í þessum dæmum: byggja Maven með war config eða samkoma Maven með Overlay.

Að hefja Camunda Tomcat dreifingu

Annar valkostur er einfaldlega að hlaða niður Camunda Tomcat dreifingunni, pakka henni niður og keyra hana. Þetta krefst aðeins Java Runtime Environment (JRE) uppsett á tölvunni þinni. Það getur verið auðvelt hlaða niður héðan.

Notkun Camunda til að auðvelda skipulagningu byggða á REST og Workflow Engine (engin Java)

Til þess að breyta gagnagrunninum eða gera eitthvað annað þarftu að stilla Tomcat eins og lýst í skjölum. Ég veit að Tomcat kann að hljóma flókið, en það er í raun mjög einfalt. Og Google veit svörin við öllu sem gæti þurft í ferlinu.

Að keyra Camunda með Tomcat

Síðasti valkosturinn er að setja upp Tomcat sjálfur og setja Camunda inn í það, eftir uppsetningarlýsingu. Þetta mun gefa þér möguleika á að nota hvaða útgáfu af Tomcat sem þú vilt, eða setja hana upp sem Windows þjónustu, til dæmis.

Setja Camunda í framleiðslu

Þetta mun venjulega krefjast lokauppsetningar til að keyra Camunda. Það eru leiðbeiningar í Camunda sem lýsa þessu í smáatriðum, en ég mun ekki fara út í þær í þessari grein - ég nefni aðeins eitt dæmi: REST API dreifingarinnar er ekki sjálfgefið stillt fyrir auðkenningu. Þú gætir viljað breyta þessu.

Toppur upp

Eins og þú sérð er mjög auðvelt að byrja með Camunda, óháð tungumálinu sem þú notar. Lykilatriðið er að öll samskipti fara fram í gegnum REST API. Uppsetningin er líka frekar auðveld, sérstaklega þegar Docker er notað.

Heimild: www.habr.com

Bæta við athugasemd