Kushandisa Camunda kuitira nyore REST-yakavakirwa orchestration uye Workflow Injini (hapana Java)

Mhoro, Habr! Ndinokupa kutariswa kweshanduro yechinyorwa "Shandisa Camunda senge iri nyore kushandisa REST-based orchestration uye workflow injini (isina kubata Java)" naBernd RΓΌcker.

07.07.2020/XNUMX/XNUMX, shanduro zvinyorwa Bernd RΓΌcker

Kushandisa Camunda kuitira nyore REST-yakavakirwa orchestration uye Workflow Injini (hapana Java)

Ndinowanzo kurukura microservice architecture nevasiri veJava vanhu: C#, Node.JS/JavaScript vagadziri, kana Golang vanofarira. Vese vakatarisana nenyaya yekuti ivo vanoda injini yekuimba mune microservice architecture kana chingori chishandiso kukwirisa mafambiro ebasa uye kuwana kugona kurongeka, kubata nguva, Saga uye kubhadharisa kutengeserana.

BPM chikuva ne open source kubva kuCamunda mukuru kumabasa akadaro. Developer hushamwari ndechimwe chezvinhu zvakakosha zvechigadzirwa. Asi ukatarisa zvinyorwa zvayo, unogona kuwana fungidziro yekuti hushamwari hwaCamunda hwakanangana nevagadziri veJava. Iyi puratifomu inopa mikana yakawanda yekubatanidza ako ega mabasa uye ekuwedzera, asi zvese zvinoitwa muJava. Ndizvo chaizvo here?

Aihwa! Muchokwadi, iwe unogona kumhanya zviri nyore Camunda pasina chero ruzivo rweJava uye gadzirisa iyo yekuvakisa kukodhi mune chero mutauro waunosarudza. Muchikamu chino tichatarisa:

  • basic architecture;
  • REST API;
  • zano pamaraibhurari evatengi aripo emitauro kunze kweJava;
  • muenzaniso wekushandisa C # uye Node.JS;
  • nzira dzekumhanyisa Camunda server (Docker kana Tomcat).

akitekicha

Camunda yakanyorwa muJava uye inoda Java Virtual Machine (JVM) kuti ishande. Camunda inopa REST API iyo inokutendera kuti unyore mune chero mutauro waunoda uye shandisa REST neCamunda:

Kushandisa Camunda kuitira nyore REST-yakavakirwa orchestration uye Workflow Injini (hapana Java)

Workflows muCamunda inotsanangurwa muBPMN, inova iri XML faira. Inogona kuenzanisirwa uchishandisa Camunda Modeler.

Kumhanya Camunda kuburikidza neyakafanovakwa Docker mufananidzo

Nzira iri nyore yekumhanyisa Camunda ndeye kushandisa Docker. Dzimwe nzira dzekumhanyisa Camunda dzinotsanangurwa gare gare muchinyorwa chino.

Kushandisa Camunda kuitira nyore REST-yakavakirwa orchestration uye Workflow Injini (hapana Java)

Muchiitiko ichi, ingomhanya:

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

Iwe haufanirwe kunetseka nezve Linux, Java Virtual Machines kana Tomcats. Dockerfiles uye zvinyorwa zvekutanga (semuenzaniso, mirairo yekubatanidza kune inodiwa dhatabhesi) inowanikwa pa Github.

Kana iwe uchida kumhanyisa Camunda Enterprise Edition, unogona kuchinja zviri nyore dockerfile.

Nekudaro, pane imwe yakaderera yekumhanyisa Camunda uchishandisa Docker: iwe unozopedzisira uine vhezheni yeTomcat iyo isingagare ichisanganisira zvigadziriso zvazvino. Kuti utenderere neizvi, unogona kugadzira mufananidzo weDocker iwe pachako zvichibva pane inodiwa Tomcat kugovera, sezvakaratidzwa mumuenzaniso uyu, kana kushandisa imwe yemhinduro dzinotsanangurwa pazasi.

Kushandisa Process Model

Ngatitarisei muenzaniso uchishandisa iyo Saga template yeyekirasi yekufamba kubhuka kwaunoda kukonzeresa zviito zvitatu zvakatevedzana uye nenyasha kutsiva zvakabudirira zviito kana ukatadza gare gare. Yakaunzwa muBPMN fomu, inoita seizvi:

Kushandisa Camunda kuitira nyore REST-yakavakirwa orchestration uye Workflow Injini (hapana Java)

Iye zvino unogona kushandisa REST API yekumisikidza modhi. Ngatiti wakaichengeta setrip.bpmn uye wakamhanya Camunda via Docker saka yave kuwanikwa pa 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

Iye zvino unogona kumhanya zviitiko zvitsva zvekushanda uchishandisa iyo REST API uye kupfuudza iyo data yaunoda kuona seyekufambiswa kwechiitiko chinosiyana:

  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

Mubvunzo unotevera unonakidza ndewekuti Camunda anokonzeresa sei maitiro sekubhurosa mota? Camunda haigone kungofona nekukurumidza masevhisi (Push-Principle), uchishandisa imwe yakavakirwa-mukati connectors, asiwo isa zvinhu zvebasa mumhando yemutsara wakavakirwa-mukati. Mushandi anogona kubva agamuchira zvinhu zvebasa kuburikidza neREST, kuita basa, uye kushuma kupera kuna Camunda (Dhonza-Simboti).

Kushandisa Camunda kuitira nyore REST-yakavakirwa orchestration uye Workflow Injini (hapana Java)

Saka kutanga unofanira kuita fetchAndLock (sezvo vamwe vashandi vanogona kugamuchira mabasa panguva imwe chete kuyera sisitimu):

  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

Woudza Camunda kuti mushandi apedza basa rake (ona kuti iwe unofanirwa kuisa iyo yekunze basa ID yakagamuchirwa muchikumbiro chekutanga):

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

Ndizvozvo - hausati wada chero Java kusvika parizvino, handiti? Uye zvakakwana kuti utange!

Client Libraries

Kufonera iyo REST API iri nyore mune chero mutauro wechirongwa. MuJavaScript zviri nyore kuita izvi uchishandisa JQuery, uye muC# unogona kushandisa System.Net.Http uye Newtonsoft.Json. Asi izvi zvichatora nguva. Saka iwe unogona kungoshandisa imwe raibhurari yemutengi.

Parizvino kune akatiwandei akagadzirira-akagadzirwa evatengi maraibhurari aripo:

Kunze kweJavaScript neJava, maraibhurari evatengi haasi chikamu cheCamunda chigadzirwa pachayo. Usatarisire ivo kutsigira ese maficha eCamunda's REST API. Nekuda kwekuti raibhurari haipe chimwe chimiro hazvireve kuti haipo, gara uchitarisa iyo Camunda REST API. Mapurojekiti akajairika anoshandisa maraibhurari sepokutangira uye template.

Muenzaniso neC#

Tichishandisa raibhurari yemutengi iri pamusoro, tinogona kunyora:

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

Yakazara inoshanda sosi kodhi inogona kuwanikwa online: ссылка. Mumwe muenzaniso unowanikwa pa ссылка.

Muenzaniso neNode.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();

Mamwe mashoko anogona kuwanikwa pawebhusaiti Github.com

Dzimwe nzira dzekutanga Camunda

Custom Docker mufananidzo ne "Camunda standalone WAR"

Seimwe nzira kune yakambovakwa Docker mufananidzo kubva kuCamunda, unogona kugadzirira Tomcat iwe (semuenzaniso, zvichibva pane yepamutemo Docker Tomcat mifananidzo) uye wozoteedzera Camunda mairi seimwe yeanonzi maWAR mafaera.

Kushandisa Camunda kuitira nyore REST-yakavakirwa orchestration uye Workflow Injini (hapana Java)

Kana iwe uine zvakawanda zvekuwedzera zvinodiwa uye uchikwanisa kugadzirisa Java yekuvaka nharaunda, unogona zvakare kugadzirisa Camunda Standalone hondo. Gadzira Maven kuvaka semumienzaniso iyi: kuvaka Maven nehondo configuration kana gungano Maven ne Overlay.

Kutangisa kugovera kweCamunda Tomcat

Imwe sarudzo ndeye kungo dhawunirodha kugovera kweCamunda Tomcat, kuisunungura uye kuimhanyisa. Kuti uite izvi, unongoda iyo Java Runtime Environment (JRE) yakaiswa pakombuta yako. Inogona kuva nyore download kubva pano.

Kushandisa Camunda kuitira nyore REST-yakavakirwa orchestration uye Workflow Injini (hapana Java)

Kuti uchinje dhatabhesi kana kuita chero chimwe chinhu chaunoda kugadzirisa Tomcat senge inotsanangurwa muzvinyorwa. Ndinoziva Tomcat inogona kuita seyakaoma, asi iri nyore kwazvo. Uye Google ine mhinduro kune zvese zvaungade mukuita.

Kumhanya Camunda uchishandisa Tomcat

Imwe yekupedzisira ndeyekugadzirisa Tomcat iwe pachako uye kuisa Camunda mairi, kutevera tsanangudzo yekuisa. Izvi zvinokupa iwe mukana wekushandisa chero vhezheni yeTomcat yaunoda, kana, semuenzaniso, kuiisa sevhisi yeWindows.

Kutanga kweCamunda mukugadzirwa

Kazhinji, izvi zvinoda kuti iwe uite imwe yekupedzisira kuseta kuti Camunda imhanye. Camunda ane nhungamiro inotsanangura izvi zvakadzama, asi ini handisi kuzobata pazviri muchinyorwa chino - ini ndichangopa muenzaniso mumwe: yekugovera's REST API haina kurongedzerwa kuti isimbiswe nekukasira. Ungada kushandura izvi.

Summing up

Sezvaungave waona, kutanga naCamunda kuri nyore kwazvo, zvisinei nemutauro waunoshandisa. Chinhu chakakosha ndechekuti kutaurirana kwese kunoitwa kuburikidza neREST API. Kuisa zvakare kuri nyore, kunyanya kana uchishandisa Docker.

Source: www.habr.com

Voeg