Kutumia Camunda kwa uimbaji rahisi kulingana na Injini ya REST na Workflow (hakuna Java)

Habari Habr! Ninawasilisha kwa mawazo yako tafsiri ya makala "Tumia Camunda kama injini ya okestra na mtiririko wa kazi ambayo ni rahisi kutumia ya REST (bila kugusa Java)" na Bernd RΓΌcker.

07.07.2020/XNUMX/XNUMX, tafsiri nakala Bernd Rucker

Kutumia Camunda kwa uimbaji rahisi kulingana na Injini ya REST na Workflow (hakuna Java)

Mara nyingi mimi hujadili usanifu wa huduma ndogo na watu wasio wa Java: watengenezaji wa C#, wasanidi wa Node.JS/JavaScript, au Golang aficionados. Wote wanakabiliwa na ukweli kwamba wanahitaji utaratibu wa orchestration katika usanifu wa huduma ndogo, au chombo tu cha kurahisisha mtiririko wa kazi na kupata uwezo wa kuagiza, kushughulikia muda wa kuisha, Saga na malipo ya malipo.

Jukwaa la BPM na chanzo wazi kutoka kwa Camunda nzuri kwa kazi kama hizo. Urafiki wa wasanidi programu ni moja wapo ya sifa kuu za bidhaa. Lakini ukiangalia nyaraka zake, unaweza kupata hisia kwamba "urafiki" wa Camunda unalenga hasa watengenezaji wa Java. Jukwaa hutoa chaguzi nyingi za kuunganisha kazi zako na viendelezi, lakini yote yanafanywa katika Java. Je, ni kweli?

Hapana! Kwa kweli, unaweza kuendesha Camunda kwa urahisi bila maarifa yoyote ya Java na kusanidi usanifu wa msimbo katika lugha yoyote unayopenda. Katika makala hii, tutaangalia:

  • usanifu wa msingi;
  • REST API
  • ushauri juu ya maktaba za mteja zilizopo kwa lugha zingine isipokuwa Java;
  • mfano kwa kutumia C # na Node.JS;
  • njia za kuanza seva ya Camunda (Docker au Tomcat).

usanifu

Camunda imeandikwa katika Java na inahitaji Java Virtual Machine (JVM) ili kuendesha. Camunda hutoa REST API ambayo hukuruhusu kuandika katika lugha yoyote unayopenda na kutumia REST na Camunda:

Kutumia Camunda kwa uimbaji rahisi kulingana na Injini ya REST na Workflow (hakuna Java)

Mitiririko ya kazi katika Camunda imefafanuliwa katika BPMN, ambayo kimsingi ni faili ya XML. Inaweza kuigwa na Mwanamitindo wa Camunda.

Inaendesha Camunda kupitia picha ya Docker iliyojengwa mapema

Njia rahisi ya kuendesha Camunda ni kutumia Docker. Njia mbadala za kuzindua Camunda zimeelezewa baadaye katika nakala hii.

Kutumia Camunda kwa uimbaji rahisi kulingana na Injini ya REST na Workflow (hakuna Java)

Katika kesi hii, endesha tu:

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

Huna haja ya kuwa na wasiwasi kuhusu Linux, JVM au Tomcats. Dockerfiles na nyaraka za msingi (kwa mfano, maagizo ya kuunganisha kwenye hifadhidata zinazohitajika) zinapatikana Github.

Ikiwa ungependa kuendesha Toleo la Biashara la Camunda unaweza kubadilisha kwa urahisi Dockerfile.

Walakini, kuendesha Camunda na Docker kuna upande mmoja: utaishia na toleo la Tomcat ambalo halijumuishi marekebisho ya hivi karibuni kila wakati. Ili kufanyia kazi hili, unaweza kuunda picha yako ya Docker kulingana na usambazaji unaohitajika wa Tomcat, kama inavyoonyeshwa kwenye mfano huu, au utumie mojawapo ya ufumbuzi ulioelezwa hapa chini.

Usambazaji wa Mfano wa Mchakato

Hebu tuangalie mfano kwa kutumia kiolezo cha Saga kwa uhifadhi wa safari wa kawaida ambapo ungependa kuanzisha vitendo vitatu mfululizo na kufidia kwa ukamilifu vitendo vilivyokamilishwa iwapo kutashindwa baadaye. Imewakilishwa katika fomu ya BPMN, inaonekana kama hii:

Kutumia Camunda kwa uimbaji rahisi kulingana na Injini ya REST na Workflow (hakuna Java)

Sasa unaweza kutumia REST API ya uwekaji wa muundo wa mchakato. Tuseme unaihifadhi kama trip.bpmn na uendeshe Camunda kupitia Docker ili ipatikane kwenye 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

Sasa unaweza kukimbia matukio mapya ya mtiririko wa kazi kutumia API ya REST na kupitisha data unayotaka kuona kama anuwai za mfano wa mtiririko wa kazi:

  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

Swali linalofuata la kufurahisha ni: Je, Camunda anaitaje taratibu kama vile kuhifadhi gari? Camunda hawezi tu kuita huduma mara moja (Push-Principle) kwa kutumia baadhi iliyojengewa ndani viunganishi, lakini pia kuweka vitu vya kazi katika aina ya utaratibu uliojengwa. Mfanyikazi anaweza kisha kuleta vitu vya kazi kupitia REST, afanye kazi, na kumwambia Camunda amalize (Vuta-Kanuni).

Kutumia Camunda kwa uimbaji rahisi kulingana na Injini ya REST na Workflow (hakuna Java)

Kwa hivyo kwanza unahitaji kutekeleza kuchotaAndLock (kwa sababu wafanyakazi wengine wanaweza kupokea kazi kwa wakati mmoja ili kuongeza mfumo):

  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

Kisha mwambie Camunda hivyo mfanyakazi alimaliza kazi (kumbuka kwamba lazima uweke kitambulisho cha kazi cha nje kilichopokelewa katika ombi la kwanza):

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

Hiyo ni - bado haujahitaji Java yoyote, sivyo? Na hiyo inatosha kuanza!

Maktaba za Wateja

Kupiga API ya REST ni rahisi katika lugha yoyote ya programu. Katika JavaScript, hii inafanywa kwa urahisi kwa kutumia JQuery, na katika C#, kwa kutumia System.Net.Http na Newtonsoft.Json. Lakini hii itachukua muda. Kwa hivyo unaweza kutumia maktaba fulani ya mteja.

Kwa sasa, maktaba kadhaa za mteja zilizotengenezwa tayari zinapatikana:

  • javascript: kiungo. Akiungwa mkono na Camunda;
  • Java: kiungo. Akiungwa mkono na Camunda;
  • C #:kiungo ΠΈ kiungo. Miradi hii yote miwili iko katika hali ya kati na haifanyi kazi, lakini inaweza kutumika kama sehemu nzuri ya kuanzia;
  • PHP: kiungo - haijakamilika sana na haijumuishi mabadiliko ya hivi karibuni ya API, lakini najua miradi inayoitumia.

Isipokuwa JavaScript na Java, maktaba za mteja si sehemu ya bidhaa ya Camunda yenyewe. Usitarajie watumie vipengele vyote vya API ya Camunda ya REST. Kwa sababu maktaba haitoi kazi fulani haimaanishi kuwa haipo, angalia API ya REST ya Camunda kila wakati. Miradi ya marejeleo hutumia maktaba kama kianzio na kiolezo.

C # mfano

Kwa kutumia maktaba ya mteja hapo juu, tunaweza kuandika kwa urahisi:

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

Nambari ya chanzo inayofanya kazi kikamilifu inaweza kupatikana mtandaoni: kiungo. Mfano mwingine unapatikana kwa kiungo.

Mfano na 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();

Habari zaidi inaweza kupatikana kwenye wavuti Github.com

Njia Mbadala za Kuzindua Camunda

Picha maalum ya Docker iliyo na "VITA ya pekee ya Camunda"

Kama mbadala wa picha ya Docker iliyojengwa hapo awali kutoka Camunda, unaweza kuandaa Tomcat mwenyewe (kwa mfano, kulingana na picha rasmi za Docker Tomcat) na kisha kunakili Camunda ndani yake kama moja ya kinachojulikana kama faili za WAR.

Kutumia Camunda kwa uimbaji rahisi kulingana na Injini ya REST na Workflow (hakuna Java)

Ikiwa una mahitaji mengi ya ziada na unaweza kuweka mazingira ya kujenga Java, unaweza pia kuanzisha vita vya Camunda Standalone. Sanidi muundo wa Maven kama katika mifano hii: jenga Maven na usanidi wa vita au mkusanyiko Maven na Overlay.

Kuanzisha usambazaji wa Camunda Tomcat

Chaguo jingine ni kupakua tu usambazaji wa Camunda Tomcat, kuifungua, na kuiendesha. Hii inahitaji tu Java Runtime Environment (JRE) iliyosakinishwa kwenye kompyuta yako. Inaweza kuwa kwa urahisi pakua kutoka hapa.

Kutumia Camunda kwa uimbaji rahisi kulingana na Injini ya REST na Workflow (hakuna Java)

Ili kubadilisha hifadhidata au kufanya kitu kingine chochote unahitaji kusanidi Tomcat kama ilivyoelezwa katika nyaraka. Najua Tomcat inaweza kuonekana kuwa ngumu, lakini kwa kweli ni rahisi sana. Na Google inajua majibu kwa kila kitu ambacho kinaweza kuhitajika katika mchakato.

Kuendesha Camunda kwa kutumia Tomcat

Njia mbadala ya mwisho ni kusanidi Tomcat mwenyewe na kusakinisha Camunda ndani yake, kufuatia maelezo ya ufungaji. Hii itakupa chaguo la kutumia toleo lolote la Tomcat unalopendelea, au kusakinisha kama huduma ya Windows, kwa mfano.

Kuzindua Camunda katika uzalishaji

Hii kwa kawaida itahitaji usanidi wa mwisho ili kuendesha Camunda. Kuna miongozo katika Camunda ambayo inaelezea hili kwa undani sana, lakini sitaingia ndani yao katika nakala hii - nitataja mfano mmoja tu: API ya REST ya usambazaji haijasanidiwa kwa uthibitishaji kwa chaguo-msingi. Unaweza kutaka kubadilisha hii.

Akihitimisha-up

Kama unavyoona, ni rahisi sana kuanza na Camunda, bila kujali lugha unayotumia. Jambo kuu ni kwamba mwingiliano wote unafanywa kupitia REST API. Ufungaji ni rahisi sana pia, haswa unapotumia Docker.

Chanzo: mapenzi.com

Kuongeza maoni