Ho sebelisa Camunda bakeng sa 'mino o bonolo o thehiloeng ho REST le Workflow Engine (ha ho Java)

Hey Habr! Ke fana ka tlhokomelo ea hau phetolelo ea sehlooho "Sebelisa Camunda e le enjine ea 'mino oa liletsa e thehiloeng ho REST e bonolo ho e sebelisa (ntle le ho ama Java)" ka Bernd Rücker.

07.07.2020/XNUMX/XNUMX, phetolelo Lingoloa Bernd Rucker

Ho sebelisa Camunda bakeng sa 'mino o bonolo o thehiloeng ho REST le Workflow Engine (ha ho Java)

Ke atisa ho buisana ka meralo ea microservice le batho bao e seng ba Java: Baetsi ba C #, Baetsi ba Node.JS/JavaScript, kapa Golang aficionados. Kaofela ha bona ba tobane le taba ea hore ba hloka mochini oa 'mino oa liletsa mohahong oa microservice, kapa sesebelisoa feela sa ho tsamaisa mosebetsi le ho fumana bokhoni ba ho odara, ho sebetsana le nako, Saga le ts'ebetso ea matšeliso.

Sethala sa BPM se nang le mohloli o bulehileng o tsoang ho Camunda e ntle bakeng sa mesebetsi e joalo. Botsoalle ba bahlahisi ke e 'ngoe ea likarolo tsa bohlokoa tsa sehlahisoa. Empa ha u sheba litokomane tsa eona, u ka fumana maikutlo a hore "botsoalle" ba Camunda bo lebisitsoe haholo ho baetsi ba Java. Sethala se fana ka menyetla e mengata ea ho hokahanya mesebetsi le li-extensions tsa hau, empa tsohle li etsoa Java. Ehlile ho joalo?

Che! Ebile, o ka tsamaisa Camunda habonolo ntle le tsebo ea Java mme o theha moralo oa khoutu ka puo efe kapa efe eo u e ratang. Sehloohong sena, re tla sheba:

  • meaho ea motheo;
  • REST API
  • likeletso ho lilaeborari tse teng tsa bareki bakeng sa lipuo tse ling ntle le Java;
  • mohlala ho sebelisa C # le Node.JS;
  • mekhoa ea ho qala seva sa Camunda (Docker kapa Tomcat).

mehaho

Camunda e ngotsoe ka Java mme e hloka Java Virtual Machine (JVM) hore e sebetse. Camunda e fana ka REST API e u lumellang ho ngola ka puo efe kapa efe eo u e ratang le ho sebelisa REST le Camunda:

Ho sebelisa Camunda bakeng sa 'mino o bonolo o thehiloeng ho REST le Workflow Engine (ha ho Java)

Mosebetsi oa Camunda o hlalosoa ho BPMN, eo ha e le hantle e leng faele ea XML. E ka etsoa mohlala ka Camunda Modeler.

Ho matha Camunda ka setšoantšo sa Docker se hahiloeng pele

Mokhoa o bonolo oa ho tsamaisa Camunda ke ho sebelisa Docker. Mekhoa e meng ea ho qala Camunda e hlalositsoe hamorao sehloohong sena.

Ho sebelisa Camunda bakeng sa 'mino o bonolo o thehiloeng ho REST le Workflow Engine (ha ho Java)

Tabeng ena, matha feela:

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

Ha ua tlameha ho tšoenyeha ka Linux, JVM kapa Tomcats. Dockerfiles le litokomane tsa mantlha (mohlala, litaelo tsa ho hokela litsing tse hlokahalang) li fumaneha ho Github.

Haeba u batla ho tsamaisa Camunda Enterprise Edition u ka fetoha habonolo dockerfile.

Leha ho le joalo, ho matha Camunda le Docker ho na le lehlakore le le leng: u tla qetella u e-na le mofuta oa Tomcat o sa kenyelletseng litokiso tsa morao-rao kamehla. Ho sebetsana le sena, o ka iketsetsa setšoantšo sa Docker ho latela phepelo e lakatsehang ea Tomcat, joalo ka ha ho bonts'itsoe mohlaleng ona, kapa sebelisa e 'ngoe ea litharollo tse hlalositsoeng ka tlase.

Phepelo ea Mohlala oa Ts'ebetso

Ha re shebeng mohlala ho sebelisa thempleite ea Saga bakeng sa buka ea maeto ea khale moo u batlang ho etsa liketso tse tharo ka tatellano le ho lefella ka bokhabane liketso tse phethiloeng ka katleho haeba ho ka etsahala hore hamorao u hlolehe. E emetsoe ka foromo ea BPMN, e shebahala tjena:

Ho sebelisa Camunda bakeng sa 'mino o bonolo o thehiloeng ho REST le Workflow Engine (ha ho Java)

Joale u ka sebelisa REST API bakeng sa phetisetso ea mofuta oa tšebetso. Ha re re u e boloka e le trip.bpmn 'me u tsamaise Camunda ka Docker kahoo e fumaneha ho 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

Joale u ka matha liketsahalo tse ncha tsa ts'ebetso u sebelisa REST API 'me u fetise data eo u batlang ho e bona e le mefuta e fapaneng ea mohlala oa mosebetsi:

  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

Potso e latelang e khahlisang ke: Camunda o bitsa lits'ebetso tse kang ho behela koloi joang? Camunda ha e khone ho letsetsa lits'ebeletso hang hang (Push-Principle) a sebelisa tse ling tse hahelletsoeng likhokahanyo, empa hape u behe lintho tsa mosebetsi ka mokhoa o hahiloeng. Joale mosebeletsi a ka lata lintho tsa mosebetsi ka REST, a etsa mosebetsi, 'me a bolelle Camunda hore a phethe (Pull-Principle).

Ho sebelisa Camunda bakeng sa 'mino o bonolo o thehiloeng ho REST le Workflow Engine (ha ho Java)

Kahoo pele u lokela ho e etsa fetchAndLock (hobane basebetsi ba bang ba ka fumana mesebetsi ka nako e le 'ngoe ho phahamisa sistimi):

  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

Ebe u bolella Camunda seo mosebetsi o phethile mosebetsi (Hlokomela hore o tlameha ho kenya id ea kantle ea mosebetsi e fumanoeng kopong ea pele):

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

Ke eona - ha o so hloke Java, na ha ho joalo? Mme ho lekane ho qala!

Lilaebrari tsa bareki

Ho letsetsa REST API ho bonolo ka puo efe kapa efe ea lenaneo. Ho JavaScript, sena se etsoa ha bonolo ho sebelisoa JQuery, le ho C#, ho sebelisoa System.Net.Http le Newtonsoft.Json. Empa sena se tla nka nako. Kahoo o ka sebelisa feela laeborari ea bareki.

Hajoale, ho na le lilaebrari tse 'maloa tse seng li entsoe tsa bareki:

  • javascript: link. E tšehelitsoe ke Camunda;
  • Java: link. E tšehelitsoe ke Camunda;
  • C #:link и link. Merero ena ka bobeli e maemong a mahareng mme e batla e robetse, empa e ka sebetsa joalo ka qalo e ntle;
  • PHP: link - ha e felle haholo ebile ha e kenyelle liphetoho tsa morao-rao tsa API, empa ke tseba merero e e sebelisang.

Ntle le JavaScript le Java, lilaebrari tsa bareki ha se karolo ea sehlahisoa sa Camunda ka boeona. Se ke oa lebella hore ba tla ts'ehetsa likarolo tsohle tsa Camunda's REST API. Hobane laeborari ha e fane ka ts'ebetso e itseng ha ho bolele hore ha e eo, lula u sheba Camunda's REST API. Merero ea litšupiso e sebelisa lilaeborari e le qalo le template.

C # mohlala

Ka ho sebelisa laeborari ea bareki e kaholimo, re ka ngola feela:

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

Khoutu ea mohloli o sebetsang ka botlalo e ka fumanoa inthaneteng: link. Mohlala o mong o fumaneha ho link.

Mohlala ka 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();

Lintlha tse ling li ka fumanoa webosaeteng Github.com

Mekhoa e meng ea ho qala Camunda

Setšoantšo sa Custom Docker se nang le "Camunda standalone WAR"

E le mokhoa o mong oa setšoantšo sa Docker se hahiloeng pele ho Camunda, u ka itokisetsa Tomcat (mohlala, ho latela litšoantšo tsa semmuso tsa Docker Tomcat) ebe u kopitsa Camunda ho eona e le e 'ngoe ea tse bitsoang lifaele tsa WAR.

Ho sebelisa Camunda bakeng sa 'mino o bonolo o thehiloeng ho REST le Workflow Engine (ha ho Java)

Haeba u na le litlhoko tse ling tse ngata 'me u ka theha tikoloho ea kaho ea Java, u ka boela ua theha Camunda Standalone war. Theha mohaho oa Maven joalo ka mehlala ena: haha Maven le war config kapa kopano Maven e nang le Overlay.

Ho qala kabo ea Camunda Tomcat

Kgetho e 'ngoe ke ho khoasolla phepelo ea Camunda Tomcat, u e lokolle, ebe u e tsamaisa. Sena se hloka feela Java Runtime Environment (JRE) e kentsoeng khomphuteng ea hau. Ho ka ba bonolo jarolla ho tloha mona.

Ho sebelisa Camunda bakeng sa 'mino o bonolo o thehiloeng ho REST le Workflow Engine (ha ho Java)

Bakeng sa ho fetola database kapa ho etsa eng kapa eng eo o e hlokang ho hlophisa Tomcat joalo ka e hlalosoang ka litokomane. Kea tseba hore Tomcat e kanna ea utloahala e rarahane, empa e bonolo haholo. 'Me Google e tseba likarabo tsa ntho e' ngoe le e 'ngoe e ka hlokoang ts'ebetsong.

Ho matha Camunda ho sebelisa Tomcat

Mokhoa o mong oa ho qetela ke ho iketsetsa Tomcat le ho kenya Camunda ho eona, ho latela tlhaloso ea ho kenya. Sena se tla u fa khetho ea ho sebelisa mofuta ofe kapa ofe oa Tomcat oo u o ratang, kapa o kenye joalo ka ts'ebeletso ea Windows, mohlala.

Ho qala Camunda tlhahiso

Hangata sena se tla hloka tlhophiso ea ho qetela ho tsamaisa Camunda. Ho na le litataiso ho Camunda tse hlalosang sena ka botlalo, empa nke ke ka kena ho tsona sehloohong sena - ke tla bolela mohlala o le mong feela: REST API ea phepelo ha e lokisetsoe ho netefatsoa ka boiketsetso. U ka rata ho fetola sena.

Ho akaretsa

Joalokaha u bona, ho bonolo haholo ho qala ka Camunda, ho sa tsotellehe hore na u sebelisa puo efe. Taba ea bohlokoa ke hore litšebelisano tsohle li etsoa ka REST API. Ho kenya ho bonolo haholo, haholo ha o sebelisa Docker.

Source: www.habr.com

Eketsa ka tlhaloso