Kugwiritsa ntchito Camunda pakuyimba kosavuta kutengera REST ndi Workflow Injini (palibe Java)

Pa Habr! Ndikupereka kwa inu kumasulira kwa nkhaniyi "Gwiritsani ntchito Camunda ngati makina osavuta kugwiritsa ntchito a REST-based orchestration and workflow engine (popanda kukhudza Java)" ndi Bernd RΓΌcker.

07.07.2020/XNUMX/XNUMX, kumasulira zolemba Bernd Rucker

Kugwiritsa ntchito Camunda pakuyimba kosavuta kutengera REST ndi Workflow Injini (palibe Java)

Nthawi zambiri ndimakambirana za zomangamanga za microservice ndi anthu omwe si a Java: C # Madivelopa, Node.JS/JavaScript okonza, kapena Golang aficionados. Onsewa akukumana ndi mfundo yakuti amafunikira makina oimba muzomangamanga za microservice, kapena chida chokha chothandizira kayendetsedwe ka ntchito ndikupeza luso lokonzekera, kusamalira nthawi, Saga ndi kubweza ndalama.

BPM nsanja ndi open source kuchokera ku Camunda zabwino kwa ntchito zotere. Ubwenzi wa Madivelopa ndi chimodzi mwazinthu zofunika kwambiri pazogulitsa. Koma mukayang'ana zolemba zake, mutha kuganiza kuti "ubwenzi" wa Camunda umayang'ana kwambiri opanga Java. Pulatifomu imapereka njira zambiri zolumikizira ntchito zanu ndi zowonjezera, koma zonse zimachitika mu Java. Ndi zoona?

Ayi! M'malo mwake, mutha kuyendetsa Camunda mosavuta popanda chidziwitso cha Java ndikukhazikitsa kamangidwe kachilankhulidwe chilichonse chomwe mungafune. M'nkhaniyi, tiwona izi:

  • zomangamanga zofunika;
  • REST API
  • upangiri pa malaibulale omwe alipo amakasitomala a zilankhulo zina kupatula Java;
  • chitsanzo pogwiritsa ntchito C # ndi Node.JS;
  • Njira zoyambira seva ya Camunda (Docker kapena Tomcat).

zomangamanga

Camunda amalembedwa mu Java ndipo amafunikira Java Virtual Machine (JVM) kuti ayendetse. Camunda imapereka REST API yomwe imakulolani kuti mulembe chilankhulo chilichonse chomwe mumakonda ndikugwiritsa ntchito REST ndi Camunda:

Kugwiritsa ntchito Camunda pakuyimba kosavuta kutengera REST ndi Workflow Injini (palibe Java)

Kuyenda kwa ntchito ku Camunda kumatanthauzidwa mu BPMN, yomwe kwenikweni ndi fayilo ya XML. Ikhoza kutsatiridwa ndi Camunda Modeler.

Kuthamanga Camunda kudzera pa chithunzi cha Docker chomwe chidapangidwa kale

Njira yosavuta yothamangitsira Camunda ndikugwiritsa ntchito Docker. Njira zina zoyambira Camunda zafotokozedwa pambuyo pake m'nkhaniyi.

Kugwiritsa ntchito Camunda pakuyimba kosavuta kutengera REST ndi Workflow Injini (palibe Java)

Pankhaniyi, ingothamangani:

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

Simuyenera kuda nkhawa ndi Linux, JVMs kapena Tomcats. Ma Dockerfiles ndi zolemba zoyambira (mwachitsanzo, malangizo olumikizirana ndi nkhokwe zofunika) akupezeka pa Github.

Ngati mukufuna kuyendetsa Camunda Enterprise Edition mutha kusintha mosavuta Dockerfile.

Komabe, kuthamanga Camunda ndi Docker kuli ndi vuto limodzi: mudzakhala ndi mtundu wa Tomcat womwe suphatikizanso zosintha zaposachedwa. Kuti muchite izi, mutha kupanga chithunzi chanu cha Docker kutengera momwe Tomcat akugawa, monga tawonera mu chitsanzo ichi, kapena gwiritsani ntchito imodzi mwamayankho omwe afotokozedwa pansipa.

Njira Yoperekera Chitsanzo

Tiyeni tiwone chitsanzo pogwiritsa ntchito template ya Saga yosungitsa maulendo apamwamba pomwe mukufuna kuyambitsa zinthu zitatu motsatizana ndikubwezera mwaulemu zomwe mwachita bwino ngati zitalephera pambuyo pake. Zoyimiridwa mu mawonekedwe a BPMN, zikuwoneka motere:

Kugwiritsa ntchito Camunda pakuyimba kosavuta kutengera REST ndi Workflow Injini (palibe Java)

Tsopano mungagwiritse ntchito REST API ya kachitidwe kachitsanzo. Tiyerekeze kuti mwasunga ngati trip.bpmn ndikuyendetsa Camunda kudzera pa Docker kuti ipezeke 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

Tsopano mutha kuthamanga zochitika zatsopano za ntchito pogwiritsa ntchito REST API ndikudutsa zomwe mukufuna kuziwona ngati zosintha zamayendedwe:

  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

Funso lotsatira losangalatsa ndilakuti: Kodi Camunda amayitanitsa bwanji njira ngati kusungitsa galimoto? Camunda sangangoyimba mautumiki nthawi yomweyo (Push-Principle) pogwiritsa ntchito zina zomangidwa zolumikizira, komanso kuika zinthu ntchito mu mtundu wa dongosolo anamanga. Wogwira ntchitoyo amatha kutenga ntchito kudzera pa REST, kugwira ntchitoyo, ndikuuza Camunda kuti amalize (Kokani-Mfundo).

Kugwiritsa ntchito Camunda pakuyimba kosavuta kutengera REST ndi Workflow Injini (palibe Java)

Ndiye choyamba muyenera kukonzekera landaAndLock (chifukwa antchito ena amatha kulandira ntchito nthawi yomweyo kuti awonjezere dongosolo):

  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

Kenako muuze Camunda kuti wogwira ntchito anamaliza ntchito (zindikirani kuti muyenera kuyika id yantchito yakunja yomwe mwalandira pa pempho loyamba):

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

Ndi momwemo - simunafunebe Java, sichoncho? Ndipo ndizokwanira kuti tiyambe!

Makasitomala Library

Kuyimbira REST API ndikosavuta m'chinenero chilichonse cha mapulogalamu. Mu JavaScript, izi zimachitika mosavuta pogwiritsa ntchito JQuery, ndi C #, pogwiritsa ntchito System.Net.Http ndi Newtonsoft.Json. Koma izi zitenga nthawi. Kotero inu mukhoza basi ntchito ena kasitomala laibulale.

Pakadali pano, malaibulale angapo opangidwa okonzeka a kasitomala alipo:

Kupatula JavaScript ndi Java, malaibulale amakasitomala sali gawo lazinthu za Camunda zokha. Osayembekezera kuti athandizira zonse za Camunda's REST API. Kungoti laibulale sapereka ntchito inayake sizitanthauza kuti kulibe, nthawi zonse onani Camunda's REST API. Ma projekiti amalozera amagwiritsa ntchito malaibulale ngati poyambira ndi template.

C # chitsanzo

Pogwiritsa ntchito laibulale yamakasitomala yomwe ili pamwambapa, titha kulemba:

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

Khodi yoyambira yogwira ntchito ikupezeka pa intaneti: ссылка. Chitsanzo china chikupezeka pa ссылка.

Chitsanzo ndi 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();

Zambiri zitha kupezeka patsamba github.com

Njira Zina Zoyambira Camunda

Chithunzi cha Custom Docker chokhala ndi "Camunda standalone WAR"

Monga m'malo mwa chithunzi cha Docker chopangidwa kale kuchokera ku Camunda, mutha kukonzekera Tomcat nokha (mwachitsanzo, kutengera zithunzi za Docker Tomcat) ndikutengera Camunda momwemo ngati imodzi mwazomwe zimatchedwa WAR.

Kugwiritsa ntchito Camunda pakuyimba kosavuta kutengera REST ndi Workflow Injini (palibe Java)

Ngati muli ndi zofunika zina zambiri ndipo mutha kukhazikitsa malo omanga a Java, mutha kukhazikitsanso nkhondo ya Camunda Standalone. Konzani Maven kumanga monga zitsanzo izi: kumanga Maven ndi nkhondo config kapena msonkhano Maven ndi Overlay.

Kuyamba kugawa kwa Camunda Tomcat

Njira ina ndikungotsitsa kugawa kwa Camunda Tomcat, kumasula, ndikuyendetsa. Izi zimangofunika Java Runtime Environment (JRE) yoyika pa kompyuta yanu. Zingakhale zosavuta tsitsani kuchokera pano.

Kugwiritsa ntchito Camunda pakuyimba kosavuta kutengera REST ndi Workflow Injini (palibe Java)

Kuti musinthe nkhokwe kapena kuchita china chilichonse chomwe mungafune kukonza Tomcat ngati zofotokozedwa mu zolembedwa. Ndikudziwa Tomcat ikhoza kumveka ngati yovuta, koma ndiyosavuta kwambiri. Ndipo Google imadziwa mayankho a chilichonse chomwe chingafuneke pakuchita izi.

Kuthamanga Camunda pogwiritsa ntchito Tomcat

Njira yomaliza ndikukhazikitsa Tomcat nokha ndikuyika Camunda mmenemo, kutsatira kufotokoza unsembe. Izi zikupatsani mwayi wogwiritsa ntchito mtundu uliwonse wa Tomcat womwe mungakonde, kapena kuyiyika ngati ntchito ya Windows, mwachitsanzo.

Kukhazikitsa Camunda pakupanga

Izi nthawi zambiri zimafunikira kukhazikitsidwa komaliza kuti muyendetse Camunda. Pali malangizo ku Camunda omwe amafotokoza izi mwatsatanetsatane, koma sindilowa m'nkhaniyi - nditchula chitsanzo chimodzi chokha: REST API yogawa sinakonzedwe kuti itsimikizidwe mwachisawawa. Mungafune kusintha izi.

Kuphatikizidwa

Monga mukuonera, n’zosavuta kuyamba ndi Camunda, mosasamala kanthu za chinenero chimene mukugwiritsa ntchito. Mfundo yofunika ndi yakuti kuyanjana konse kumachitika kudzera mu REST API. Kukhazikitsa ndikosavutanso, makamaka mukamagwiritsa ntchito Docker.

Source: www.habr.com

Kuwonjezera ndemanga