Ma te whakamahi i te Camunda mo te whakangawari i runga i te REST me te miihini Reremahi (kaore he Java)

Hei Habr! Ka whakaatu ahau ki a koutou te whakamaoritanga o te tuhinga "Whakamahia a Camunda hei miihini whakahiato me te miihini rerenga mahi ngawari ki te whakamahi (kaore e pa ki a Java)" na Bernd Rücker.

07.07.2020/XNUMX/XNUMX, whakamaoritanga Tuhinga Bernd Rücker

Ma te whakamahi i te Camunda mo te whakangawari i runga i te REST me te miihini Reremahi (kaore he Java)

He maha nga wa ka korero ahau mo te hoahoanga microservice me nga tangata ehara i te Java: C#, Node.JS/JavaScript kaiwhakawhanake, me te hunga kaingākau ki a Golang. Ko ratou katoa e pa ana ki te meka e hiahia ana ratou ki tetahi miihini whakahiato i roto i te hoahoanga microservice, he taputapu noa ranei ki te arotau i te rerenga mahi me te whai mana ki te ota, ki te hapai i nga wa, putaputa me te utu utu.

BPM turanga ki puna tuwhera mai i Camunda pai mo nga mahi pera. Ko te hoahoa o te kaiwhakawhanake tetahi o nga ahuatanga matua o te hua. Engari ki te titiro koe ki ana tuhinga, ka puta pea te whakaaro ko te atawhai a Camunda te nuinga ki nga kaihanga Java. He maha nga waahi ka taea e te papaaho te hono i o ake mahi me o taapiri, engari kua oti katoa i Java. He tino tika?

Kao! Ko te tikanga, ka taea e koe te whakahaere ngawari i a Camunda me te kore matauranga Java me te whirihora i te hoahoanga ki te tohu i tetahi reo e pai ana koe. I roto i tenei tuhinga ka titiro tatou ki:

  • hoahoanga taketake;
  • API OE;
  • nga tohutohu mo nga whare pukapuka a nga kaihoko mo nga reo ke atu i a Java;
  • tauira o te whakamahi C # me Node.JS;
  • nga huarahi ki te whakahaere i te tūmau Camunda (Docker or Tomcat).

hoahoanga

Kua tuhia a Camunda ki Java me te hiahia ki te Java Virtual Machine (JVM) hei whakahaere. Ka whakarato a Camunda i te REST API e taea ai e koe te tuhi i tetahi reo e pai ana koe me te whakamahi i te REST me Camunda:

Ma te whakamahi i te Camunda mo te whakangawari i runga i te REST me te miihini Reremahi (kaore he Java)

Ko nga rerengamahi i Camunda kua tautuhia ki te BPMN, he konae XML te tikanga. Ka taea te whakatauira ma te whakamahi Kaitauira Camunda.

Te whakahaere i a Camunda ma te ahua o Docker kua oti te hanga

Ko te huarahi ngawari ki te whakahaere i a Camunda ko te whakamahi Docker. Ko nga huarahi rereke hei whakahaere i a Camunda ka korerohia i muri mai i tenei tuhinga.

Ma te whakamahi i te Camunda mo te whakangawari i runga i te REST me te miihini Reremahi (kaore he Java)

I tenei keehi, rere noa:

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

Kaore koe e awangawanga mo Linux, Java Virtual Machines, Tomcats ranei. Kei te waatea nga Dockerfiles me nga tuhinga taketake (hei tauira, nga tohutohu mo te hono ki nga papaa raraunga e hiahiatia ana). GitHub.

Ki te hiahia koe ki te whakahaere i te Camunda Enterprise Edition, ka taea e koe te whakarereke Dockerfile.

Heoi, he kotahi te heke ki te whakahaere i a Camunda ma te whakamahi i a Docker: ka mutu koe ki te putanga o Tomcat kaore e uru ki nga whakatikatika hou. Hei huri noa i tenei, ka taea e koe te hanga i tetahi ahua Docker i runga i te tohatoha Tomcat e hiahiatia ana, penei i tenei tauira, ka whakamahi ranei i tetahi o nga otinga e whakaahuatia ana i raro nei.

Te Whakatakoto Tauira Tukatuka

Titiro ki tetahi tauira e whakamahi ana i te tauira putaputa mo te rahui haerenga matarohia e hiahia ana koe ki te whakaoho kia toru nga hohenga i te rarangi me te utu i nga mahi angitu inaa ka rahua. Ka whakaatuhia ki te ahua BPMN, penei te ahua:

Ma te whakamahi i te Camunda mo te whakangawari i runga i te REST me te miihini Reremahi (kaore he Java)

Inaianei ka taea e koe te whakamahi REST API mo te tuku tauira tukanga. Me kii i tiakina e koe hei trip.bpmn me te whakahaere i a Camunda ma te Docker kia waatea ai ki te 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

Inaianei ka taea e koe te oma tauira rerengamahi hou te whakamahi i te REST API me te tuku i nga raraunga e hiahia ana koe ki te kite hei taurangi tauira rerengamahi:

  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

Ko te patai pai e whai ake nei he pehea te mahi a Camunda i nga tikanga penei i te tono waka? Kaore e taea e Camunda te karanga tonu i nga ratonga (Push-Principle), ma te whakamahi i etahi whakaurunga tūhonohono, engari me whakauru ano hoki nga taonga mahi ki roto i tetahi momo rarangi whakauru. Ka taea e te kaimahi te whiwhi i nga mea mahi ma te REST, ka mahi i nga mahi, ka ripoata te otinga ki a Camunda (Pull-Principle).

Ma te whakamahi i te Camunda mo te whakangawari i runga i te REST me te miihini Reremahi (kaore he Java)

Na tuatahi me mahi koe fetchAndLock (i te mea ka taea e etahi atu kaimahi te whiwhi i nga mahi i te wa kotahi ki te whakarahi i te punaha):

  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

Na ka korero atu ki a Camunda kua oti te mahi a te kaimahi (kia mohio koe me whakauru koe i te ID mahi o waho kua riro mai i te tono tuatahi):

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

Koia - kaore koe e hiahia ki tetahi Java i tenei wa, tika? Na ka nui noa ki te timata!

Whare Pukapuka Kiritaki

He ngawari te waea ki te REST API i roto i tetahi reo hotaka. I roto i te JavaScript he pai ki te mahi i tenei ma te whakamahi i te JQuery, a i roto i te C # ka taea e koe te whakamahi i te System.Net.Http me Newtonsoft.Json. Engari ka roa tenei. Na ka taea e koe te whakamahi i etahi whare pukapuka kiritaki.

I tenei wa, he maha nga whare pukapuka kiritaki kua rite:

  • JavaScript: hono. Tautokohia e Camunda;
  • Java: hono. Tautokohia e Camunda;
  • C #:hono и hono. Ko enei kaupapa e rua kei te ahua takawaenga, karekau he mahi, engari ka taea te mahi hei timatanga pai;
  • PHP: hono ehara i te whare pukapuka tino oti, kaore hoki i te whakauru i nga huringa API hou, engari e mohio ana ahau ki nga kaupapa e whakamahi ana.

Haunga te JavaScript me te Java, ko nga whare pukapuka kiritaki ehara i te waahanga o te hua Camunda ake. Kaua e tumanako ka tautokohia e ratou nga ahuatanga katoa o te REST API a Camunda. Na te mea karekau te whare pukapuka e whakarato i tetahi ahuatanga ehara i te mea karekau i reira, tirohia tonu te Camunda REST API. Ka whakamahia e nga kaupapa angamaheni nga whare pukapuka hei timatanga me te tauira.

Tauira me C#

Ma te whakamahi i te whare pukapuka kiritaki i runga ake nei, ka taea e taatau te tuhi noa:

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

Ka kitea te waehere puna mahi katoa i runga ipurangi: hono. Ko tetahi atu tauira kei te waatea i hono.

Tauira 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();

Ka kitea etahi atu korero i runga i te paetukutuku github.com

Nga huarahi rereke hei timata i a Camunda

Atahanga Docker Ritenga me te "Camunda standalone WAR"

Hei rereke ki te ahua Docker i hangaia i mua i a Camunda, ka taea e koe te whakarite Tomcat koe (hei tauira, i runga i nga whakaahua a Docker Tomcat mana) katahi ka kapea a Camunda ki roto hei tetahi o nga mea e kiia nei ko nga konae WAR.

Ma te whakamahi i te Camunda mo te whakangawari i runga i te REST me te miihini Reremahi (kaore he Java)

Mena he maha atu nga whakaritenga ka taea e koe te whakarite i tetahi taiao hanga Java, ka taea hoki e koe te whirihora i te pakanga a Camunda Standalone. Whakaturia he hanga Maven penei i enei tauira: hanga Maven me te whirihoranga whawhai hui ranei Maven me te Whakakikorua.

Te whakarewa i te tohatoha Camunda Tomcat

Ko tetahi atu whiringa ko te tango noa i te tohatoha Camunda Tomcat, wetewetehia ka whakahaere. Hei mahi i tenei, me whakauru noa te Java Runtime Environment (JRE) ki to rorohiko. Ka taea te ngawari tiki mai i konei.

Ma te whakamahi i te Camunda mo te whakangawari i runga i te REST me te miihini Reremahi (kaore he Java)

Ki te huri i te pātengi raraunga ki te mahi i tetahi atu mea e hiahia ana koe ki te whirihora Tomcat rite i whakaahuatia i roto i nga tuhinga. E mohio ana ahau he ahua uaua a Tomcat, engari he tino ngawari. A kei a Google nga whakautu ki nga mea katoa e hiahia ana koe i roto i te mahi.

Te whakahaere i a Camunda ma te whakamahi i a Tomcat

Ko te huarahi whakamutunga ko te whirihora i a Tomcat i a koe ano me te whakauru i a Camunda ki roto, whai i te whakaahuatanga whakaurunga. Ma tenei ka whai waahi koe ki te whakamahi i tetahi putanga o Tomcat e pai ana koe, hei tauira ranei, whakauruhia hei ratonga Windows.

Te whakarewanga o Camunda ki te hanga

Ko te tikanga, me mahi koe i etahi tatūnga whakamutunga kia rere a Camunda. Kei a Camunda nga aratohu e whakaatu ana i nga korero nui, engari kaore au e pa ki a raatau i tenei tuhinga - Ka hoatu noa e ahau tetahi tauira: ko te REST API o te tohatoha kaore i te whirihorahia mo te whakamotuhēhēnga taunoa. Ka hiahia pea koe ki te huri i tenei.

Kohia ana

I kite pea koe, he tino ngawari te tiimata me te Camunda, ahakoa te reo e whakamahia ana e koe. Ko te kaupapa matua ko nga korero katoa ka mahia ma te REST API. He ngawari noa te whakaurunga, ina koa ka whakamahi i a Docker.

Source: will.com

Tāpiri i te kōrero