Ukusebenzisa i-Camunda ku-orchestration elula esekwe ku-REST kanye ne-Workflow Engine (ayikho i-Java)

Sawubona, Habr! Ngethula ekunakeni kwakho ukuhunyushwa kwalesi sihloko "Sebenzisa i-Camunda njengenjini ye-orchestration esekwe ku-REST okulula ukuyisebenzisa (ngaphandle kokuthinta i-Java)" nguBernd Rücker.

07.07.2020/XNUMX/XNUMX, ukuhumusha izindatshana Bernd Rücker

Ukusebenzisa i-Camunda ku-orchestration elula esekwe ku-REST kanye ne-Workflow Engine (ayikho i-Java)

Ngivame ukuxoxa ngezakhiwo ze-microservice nabantu okungebona abe-Java: C#, Node.JS/JavaScript onjiniyela, noma abathanda i-Golang. Bonke babhekene neqiniso lokuthi badinga injini ye-orchestration ekwakhiweni kwe-microservice noma ithuluzi nje lokuthuthukisa ukuhamba komsebenzi futhi bathole ikhono loku-oda, ukuphatha isikhathi, i-Saga kanye nokunxeshezelwa kokwenziwe.

Inkundla ye-BPM nge umthombo ovulekile ovela kuCamunda kuhle emisebenzini enjalo. Ubungane bonjiniyela kungenye yezici ezibalulekile zomkhiqizo. Kepha uma ubheka imibhalo yayo, ungathola umbono wokuthi ubungane bukaCamunda buqondiswe kakhulu kubathuthukisi beJava. Ipulatifomu inikeza amathuba amaningi okuxhuma imisebenzi yakho nezandiso, kodwa konke kwenziwa ku-Java. Ingabe ngempela?

Cha! Eqinisweni, ungakwazi ukusebenzisa i-Camunda kalula ngaphandle kolwazi lwe-Java futhi ulungiselele ukwakheka ukuze ikhodi nganoma yiluphi ulimi oluthandayo. Kulesi sihloko sizobheka:

  • izakhiwo eziyisisekelo;
  • I-REST API;
  • iseluleko kumitapo yolwazi yamaklayenti ekhona kwezinye izilimi ngaphandle kwe-Java;
  • isibonelo sokusebenzisa i-C# ne-Node.JS;
  • Izindlela zokusebenzisa iseva ye-Camunda (i-Docker noma i-Tomcat).

bokwakha

I-Camunda ibhalwe nge-Java futhi idinga umshini we-Java Virtual (JVM) ukuze isebenze. I-Camunda inikeza i-REST API ekuvumela ukuthi ubhale nganoma yiluphi ulimi oluthandayo futhi usebenzise i-REST nge-Camunda:

Ukusebenzisa i-Camunda ku-orchestration elula esekwe ku-REST kanye ne-Workflow Engine (ayikho i-Java)

Ukugeleza komsebenzi ku-Camunda kuchazwa nge-BPMN, okuyifayela le-XML. Kungenziwa imodeli ngokusebenzisa Camunda Modeler.

Isebenzisa i-Camunda ngesithombe se-Docker esakhiwe ngaphambilini

Indlela elula yokusebenzisa i-Camunda ukusebenzisa i-Docker. Ezinye izindlela zokusebenzisa i-Camunda zichazwe kamuva kulesi sihloko.

Ukusebenzisa i-Camunda ku-orchestration elula esekwe ku-REST kanye ne-Workflow Engine (ayikho i-Java)

Kulesi simo, vele ugijime:

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

Awudingi ukukhathazeka nge-Linux, i-Java Virtual Machines noma i-Tomcats. Ama-Dockerfiles kanye nemibhalo eyisisekelo (isibonelo, imiyalelo yokuxhuma kusizindalwazi esidingekayo) kuyatholakala kokuthi I-Github.

Uma ufuna ukusebenzisa i-Camunda Enterprise Edition, ungashintsha kalula I-Dockerfile.

Kodwa-ke, kunohlangothi olulodwa lokusebenzisa i-Camunda usebenzisa i-Docker: uzogcina unenguqulo ye-Tomcat engafaki njalo ukulungiswa kwakamuva. Ukuzungeza lokhu ngandlela thile, ungazakhela ngokwakho isithombe se-Docker ngokusekelwe ekusabalaliseni kwe-Tomcat oyifunayo, njengoba kukhonjisiwe kulesi sibonelo, noma usebenzise esinye sezixazululo ezichazwe ngezansi.

Kusetshenziswa Imodeli Yenqubo

Ake sibheke isibonelo sisebenzisa isifanekiso se-Saga sokubhuka kohambo lwakudala lapho ufuna ukuqalisa khona izenzo ezintathu zilandelana futhi unxephezele ngomusa izenzo eziyimpumelelo uma kwenzeka ukwehluleka kamuva. Kwethulwa ngefomu le-BPMN, libukeka kanje:

Ukusebenzisa i-Camunda ku-orchestration elula esekwe ku-REST kanye ne-Workflow Engine (ayikho i-Java)

Manje ungasebenzisa I-REST API yokukhishwa kwemodeli yenqubo. Ake sithi uyigcine njenge-trip.bpmn futhi wasebenzisa i-Camunda nge-Docker ukuze itholakale ku-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

Manje ungagijima izenzakalo ezintsha zokuhamba komsebenzi usebenzisa i-REST API nokudlulisa idatha ofuna ukuyibona njengokuguquguquka kwesibonelo sokuhamba komsebenzi:

  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

Umbuzo olandelayo othokozisayo ngothi uCamunda uziqalisa kanjani izinqubo ezifana nokubhuka imoto? I-Camunda ayikwazi nje ukushayela ngokushesha izinsizakalo (Push-Principle), isebenzisa okunye okwakhelwe ngaphakathi izixhumi, kodwa futhi ubeke izinto zomsebenzi ohlotsheni lomugqa owakhelwe ngaphakathi. Umsebenzi angakwazi ukuthola izinto zomsebenzi nge-REST, enze umsebenzi, futhi abike ukuqedwa ku-Camunda (Pull-Principle).

Ukusebenzisa i-Camunda ku-orchestration elula esekwe ku-REST kanye ne-Workflow Engine (ayikho i-Java)

Ngakho okokuqala udinga ukwenza landaAndLock (njengoba abanye abasebenzi bengathola imisebenzi ngesikhathi esifanayo ukukala uhlelo):

  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

Bese utshela uCamunda lokho isisebenzi siwuqedile umsebenzi waso (qaphela ukuthi kufanele ufake i-ID yomsebenzi wangaphandle oyithole esicelweni sokuqala):

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

Yilokho - awukakadingi i-Java kuze kube manje, akunjalo? Futhi lokho kwanele ukuqalisa!

Imitapo yolwazi yeklayenti

Ukushayela i-REST API kulula kunoma yiluphi ulimi lokuhlela. Ku-JavaScript kulula ukwenza lokhu usebenzisa i-JQuery, futhi ku-C# ungasebenzisa i-System.Net.Http kanye ne-Newtonsoft.Json. Kodwa lokhu kuzothatha isikhathi. Ngakho ungasebenzisa umtapo wolwazi weklayenti.

Kukhona amalabhulali amaklayenti amaningi enziwe ngomumo atholakalayo:

  • IJavaScript: isixhumanisi. Isekelwe nguCamunda;
  • IJava: isixhumanisi. Isekelwe nguCamunda;
  • C #:isixhumanisi и isixhumanisi. Womabili la maphrojekthi asesimweni esimaphakathi futhi awekho nhlobo umsebenzi, kodwa angasebenza njengesiqalo esihle;
  • I-PHP: isixhumanisi ayiwona umtapo wolwazi ophelele kakhulu futhi ayifaki izinguquko zakamuva ze-API, kodwa ngiyazi ngamaphrojekthi ayisebenzisayo.

Ngaphandle kweJavaScript neJava, imitapo yolwazi yamaklayenti ayiyona ingxenye yomkhiqizo weCamunda ngokwawo. Ungalindeli ukuthi basekele zonke izici ze-Camunda's REST API. Ngenxa yokuthi umtapo wolwazi awunikezi isici esithile akusho ukuthi asikho, hlala uhlola i-Camunda REST API. Amaphrojekthi ajwayelekile asebenzisa imitapo yolwazi njengesiqalo nesifanekiso.

Isibonelo nge-C#

Sisebenzisa umtapo wolwazi weklayenti ongenhla, singavele sibhale:

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

Ikhodi egcwele yomthombo osebenzayo ingatholakala ku-inthanethi: isixhumanisi. Esinye isibonelo sitholakala kokuthi isixhumanisi.

Isibonelo nge-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();

Imininingwane engaphezulu ingatholakala kuwebhusayithi. github.com

Ezinye izindlela zokuqalisa i-Camunda

Isithombe se-Custom Docker esine-"Camunda standalone WAR"

Njengenye indlela yesithombe esakhiwe ngaphambili se-Docker esivela ku-Camunda, ungazilungiselela i-Tomcat ngokwakho (ngokwesibonelo, ngokusekelwe ezithombeni ezisemthethweni ze-Docker Tomcat) bese ukopisha i-Camunda kuyo njengenye yamafayela okuthiwa yi-WAR.

Ukusebenzisa i-Camunda ku-orchestration elula esekwe ku-REST kanye ne-Workflow Engine (ayikho i-Java)

Uma unezidingo eziningi ezengeziwe futhi ungenza ngendlela oyifisayo indawo yokwakha ye-Java, ungaphinda ulungiselele impi ye-Camunda Standalone. Setha i-Maven build njengalezi zibonelo: ukwakha I-Maven enokucushwa kwempi noma umhlangano I-Maven ene-Overlay.

Iqalisa ukusatshalaliswa kwe-Camunda Tomcat

Enye inketho ukumane ulande ukusatshalaliswa kweCamunda Tomcat, uyivule bese uyiqhuba. Ukuze wenze lokhu, udinga kuphela i-Java Runtime Environment (JRE) efakwe kukhompyutha yakho. Kungaba lula landa lapha.

Ukusebenzisa i-Camunda ku-orchestration elula esekwe ku-REST kanye ne-Workflow Engine (ayikho i-Java)

Ukushintsha i-database noma wenze noma yini enye oyidingayo ukuze ulungiselele i-Tomcat efana echazwe kumadokhumenti. Ngiyazi ukuthi i-Tomcat ingase ibonakale iyinkimbinkimbi, kodwa empeleni ilula kakhulu. Futhi i-Google inezimpendulo zakho konke ongase ukudinge kule nqubo.

Ukugijima i-Camunda usebenzisa i-Tomcat

Enye indlela yokugcina ukulungiselela i-Tomcat ngokwakho bese ufaka i-Camunda kuyo, kulandela incazelo yokufaka. Lokhu kuzokunika ithuba lokusebenzisa noma iyiphi inguqulo ye-Tomcat oyikhethayo, noma, isibonelo, uyifake njengesevisi ye-Windows.

Kwethulwa i-Camunda ekukhiqizeni

Ngokuvamile, lokhu kuzodinga ukuthi wenze ukusetha kokugcina ukuze i-Camunda isebenze. I-Camunda ineziqondiso ezichaza lokhu ngokuningiliziwe, kodwa ngeke ngizithinte kulesi sihloko - ngizonikeza isibonelo esisodwa: i-REST API yokusabalalisa ayilungiselelwe ukuqinisekiswa ngokuzenzakalelayo. Ungase ufune ukushintsha lokhu.

Ukufingqa

Njengoba kungenzeka ukuthi ubonile, ukuqalisa ngeCamunda kulula kakhulu, kungakhathalekile ukuthi usebenzisa luphi ulimi. Iphuzu elibalulekile ukuthi konke ukuxhumana kwenziwa nge-REST API. Ukufakwa nakho kulula kakhulu, ikakhulukazi uma usebenzisa i-Docker.

Source: www.habr.com

Engeza amazwana