Amfani da Camunda don sauƙi na tushen REST da Injin Gudun Aiki (babu Java)

Hello, Habr! Ina gabatar muku da fassarar labarin "Yi amfani da Camunda azaman mai sauƙin amfani da kayan kaɗe-kaɗe na REST da injin gudana (ba tare da taɓa Java ba)" da Bernd Rücker.

07.07.2020/XNUMX/XNUMX, tafsiri labarai Bernd Rücker

Amfani da Camunda don sauƙi na tushen REST da Injin Gudun Aiki (babu Java)

Na kan tattauna gine-ginen microservice tare da mutanen da ba Java ba: C# masu haɓakawa, Node.JS/JavaScript masu haɓakawa, ko Golang aficionados. Dukkanin su suna fuskantar gaskiyar cewa suna buƙatar tsarin ƙididdiga a cikin gine-ginen microservice, ko kuma kawai kayan aiki don daidaita ayyukan aiki da samun ikon yin oda, sarrafa lokutan lokaci, Saga da ma'amaloli masu ramawa.

BPM dandamali tare da bude tushen daga Camunda mai girma ga irin waɗannan ayyuka. Abokan haɓakawa ɗaya ne daga cikin mahimman fasalulluka na samfurin. Amma idan ka kalli takardun sa, za ka iya samun ra'ayi cewa abokantakar Camunda galibi ana nufin masu haɓaka Java ne. Dandalin yana ba da dama da yawa don haɗa ayyukan ku da kari, amma duk ana yin su a cikin Java. Da gaske ne?

A'a! A zahiri, zaku iya gudanar da Camunda cikin sauƙi ba tare da kowane ilimin Java ba kuma saita tsarin gine-gine don lamba a kowane harshe da kuke so. A cikin wannan labarin za mu kalli:

  • gine-gine na asali;
  • API ɗin REST;
  • shawara akan dakunan karatu na abokin ciniki don harsuna ban da Java;
  • misali na amfani da C # da Node.JS;
  • hanyoyin tafiyar da uwar garken Camunda (Docker ko Tomcat).

gine

An rubuta Camunda a cikin Java kuma yana buƙatar na'urar Virtual na Java (JVM) don aiki. Camunda yana ba da REST API wanda ke ba ku damar rubuta cikin kowane harshe da kuke so kuma kuyi amfani da REST tare da Camunda:

Amfani da Camunda don sauƙi na tushen REST da Injin Gudun Aiki (babu Java)

Ana bayyana ayyukan aiki a cikin Camunda a cikin BPMN, wanda shine ainihin fayil na XML. Ana iya yin samfurin ta amfani da shi Camunda Modeler.

Gudun Camunda ta hanyar hoton Docker da aka riga aka gina

Hanya mafi sauƙi don gudanar da Camunda shine amfani da Docker. Madadin hanyoyin gudanar da Camunda an bayyana su daga baya a cikin wannan labarin.

Amfani da Camunda don sauƙi na tushen REST da Injin Gudun Aiki (babu Java)

A wannan yanayin, kawai gudu:

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

Ba lallai ne ku damu da Linux, JVMs ko Tomcats ba. Dockerfiles da takaddun asali (misali, umarni don haɗawa zuwa bayanan da ake buƙata) suna samuwa a Github.

Idan kuna son gudanar da Buga Kasuwancin Camunda, zaku iya canzawa cikin sauƙi Dockerfile.

Koyaya, gudanar da Camunda tare da Docker yana da fa'ida ɗaya: zaku ƙare tare da sigar Tomcat wanda koyaushe baya haɗa sabbin gyare-gyare. Don yin aiki a kusa da wannan, zaku iya ƙirƙirar hoton Docker naku dangane da rarraba Tomcat da ake so, kamar yadda aka nuna a wannan misalin, ko amfani da ɗayan mafita da aka bayyana a ƙasa.

Aiwatar da Samfurin Tsari

Bari mu kalli misali ta amfani da samfurin Saga don yin ajiyar tafiye-tafiye na al'ada inda kake son jawo ayyuka uku a jere kuma cikin alherin rama don kammala ayyukan da aka samu cikin nasara idan aka sami gazawar daga baya. An gabatar da shi a cikin sigar BPMN, yayi kama da haka:

Amfani da Camunda don sauƙi na tushen REST da Injin Gudun Aiki (babu Java)

Yanzu zaka iya amfani API ɗin REST don ƙaddamar da ƙirar tsari. Bari mu ce kun ajiye shi azaman tafiya.bpmn kuma ku gudu Camunda ta Docker don haka yana samuwa akan 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

Yanzu za ku iya gudu sababbin al'amuran aiki ta amfani da REST API kuma wuce bayanan da kuke son gani azaman masu canjin aikin aiki:

  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

Tambaya mai ban sha'awa ta gaba ita ce: ta yaya Camunda ke kiran hanyoyin kamar yin ajiyar mota? Camunda ba zai iya kiran sabis nan da nan ba (Push-Principle) ta amfani da wasu ginanniyar ciki masu haɗin kai, amma kuma sanya kayan aiki a cikin wani nau'in layin da aka gina a ciki. Sannan ma'aikacin zai iya debo kayan aiki ta hanyar REST, yayi aikin, kuma ya gaya wa Camunda ya kammala (Pull-Principle).

Amfani da Camunda don sauƙi na tushen REST da Injin Gudun Aiki (babu Java)

Don haka da farko kuna buƙatar yin daukoAndLock (saboda sauran ma'aikata na iya karɓar ayyuka a lokaci guda don daidaita tsarin):

  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

Sannan gayawa Camunda haka ma'aikaci ya kammala aikinsa (lura cewa dole ne ka shigar da id ɗin aikin waje da aka karɓa a cikin buƙatun farko):

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

Shi ke nan - ba ku buƙatar Java zuwa yanzu, daidai? Kuma ya isa ya fara!

Dakunan karatu na abokin ciniki

Kira API REST yana da sauƙi a cikin kowane yaren shirye-shirye. A cikin JavaScript, ana yin wannan cikin dacewa ta amfani da JQuery, kuma a cikin C #, ta amfani da System.Net.Http da Newtonsoft.Json. Amma wannan zai ɗauki lokaci. Don haka za ku iya kawai amfani da ɗakin karatu na abokin ciniki.

A halin yanzu akwai shirye-shiryen dakunan karatu na abokin ciniki da yawa akwai:

  • javascript: mahada. Camunda ya goyi bayan;
  • Java: mahada. Camunda ya goyi bayan;
  • C #:mahada и mahada. Duk waɗannan ayyukan biyu suna cikin tsaka-tsaki kuma a zahiri suna kwance, amma suna iya zama madaidaicin farawa;
  • PHP: mahada - ba cikakke sosai ba kuma baya haɗa da sabbin canje-canjen API, amma na san ayyukan da ke amfani da shi.

Ban da JavaScript da Java, ɗakunan karatu na abokin ciniki ba sa cikin samfurin Camunda da kansa. Kar a yi tsammanin za su goyi bayan duk fasalulluka na API ɗin REST na Camunda. Kawai saboda ɗakin karatu baya samar da wani fasalin ba yana nufin babu shi ba, koyaushe duba Camunda REST API. Ayyuka na yau da kullun suna amfani da ɗakunan karatu azaman wurin farawa da samfuri.

C# misali

Amfani da ɗakin karatu na abokin ciniki na sama, za mu iya rubuta kawai:

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

Ana iya samun cikakken lambar tushen aiki akan layi: mahada. Wani misali yana samuwa a mahada.

Misali tare da 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();

Ana iya samun ƙarin bayani akan gidan yanar gizon github.com

Madadin hanyoyin fara Camunda

Hoton Docker na Custom tare da "Camunda standalone WAR"

A matsayin madadin hoton Docker da aka riga aka gina daga Camunda, zaku iya shirya Tomcat da kanku (misali, dangane da hotunan Docker Tomcat na hukuma) sannan kwafi Camunda a ciki azaman ɗayan abubuwan da ake kira fayilolin WAR.

Amfani da Camunda don sauƙi na tushen REST da Injin Gudun Aiki (babu Java)

Idan kuna da ƙarin ƙarin buƙatu da yawa kuma kuna iya tsara yanayin ginin Java, kuna iya saita Camunda Standalone War. Saita ginin Maven kamar a cikin waɗannan misalan: gini Maven tare da tsarin yaƙi ko taro Maven tare da overlay.

Ƙaddamar da rarrabawar Camunda Tomcat

Wani zaɓi shine kawai zazzage rarrabawar Camunda Tomcat, buɗe shi, kuma gudanar da shi. Wannan kawai yana buƙatar Java Runtime Environment (JRE) shigar akan kwamfutarka. Yana iya zama da sauƙi download daga nan.

Amfani da Camunda don sauƙi na tushen REST da Injin Gudun Aiki (babu Java)

Don canza bayanan bayanai ko yin wani abu kuma kuna buƙatar saita Tomcat kamar aka bayyana a cikin takardun. Na san Tomcat na iya yin sauti mai rikitarwa, amma a zahiri abu ne mai sauqi. Kuma Google yana da amsoshin duk abin da kuke buƙata a cikin tsarin.

Gudun Camunda ta amfani da Tomcat

Madadin ƙarshe shine saita Tomcat da kanku kuma shigar da Camunda a ciki, bin bayanin shigarwa. Wannan zai ba ku zaɓi don amfani da kowace sigar Tomcat da kuka fi so, ko shigar da shi azaman sabis na Windows, misali.

Kaddamar da Camunda zuwa samarwa

Yawanci, wannan zai buƙaci ku yi wasu saitin ƙarshe don samun Camunda yana gudana. Camunda yana da jagororin da suka bayyana wannan dalla-dalla, amma ba zan taɓa su ba a cikin wannan labarin - Zan ba da misali ɗaya kawai: API ɗin REST na rarraba ba a saita shi don tantancewa ta tsohuwa. Kuna iya canza wannan.

Girgawa sama

Kamar yadda wataƙila kun lura, farawa da Camunda abu ne mai sauƙi, ba tare da la’akari da yaren da kuke amfani da shi ba. Makullin shine cewa duk sadarwa ana yin ta ta REST API. Shigarwa kuma abu ne mai sauƙi, musamman lokacin amfani da Docker.

source: www.habr.com

Add a comment