L-użu ta' Camunda għal orkestrazzjoni faċli bbażata fuq REST u Workflow Engine (mhux Java)

Ħej Habr! Nippreżenta għall-attenzjoni tiegħek it-traduzzjoni tal-artiklu "Uża Camunda bħala magna tal-orkestrazzjoni u tal-fluss tax-xogħol ibbażata fuq REST faċli biex tużah (mingħajr ma tmiss Java)" minn Bernd Rücker.

07.07.2020/XNUMX/XNUMX, traduzzjoni oġġetti Bernd Rucker

L-użu ta' Camunda għal orkestrazzjoni faċli bbażata fuq REST u Workflow Engine (mhux Java)

Spiss niddiskuti l-arkitettura ta’ mikroservizzi ma’ nies li mhumiex Java: żviluppaturi C#, żviluppaturi Node.JS/JavaScript, jew dilettanti ta’ Golang. Kollha kemm huma jiffaċċjaw il-fatt li jeħtieġu mekkaniżmu ta 'orkestrazzjoni f'arkitettura ta' mikroservizz, jew sempliċement għodda biex jissimplifikaw il-fluss tax-xogħol u jiksbu l-abbiltà li jordnaw, jimmaniġġjaw timeouts, Saga u tranżazzjonijiet ta 'kumpens.

Pjattaforma BPM ma sors miftuħ minn Camunda kbir għal kompiti bħal dawn. Il-ħbiberija tal-iżviluppatur hija waħda mill-karatteristiċi ewlenin tal-prodott. Imma jekk tħares lejn id-dokumentazzjoni tagħha, jista 'jkollok l-impressjoni li l-"ħbiberija" ta' Camunda hija mmirata prinċipalment għall-iżviluppaturi Java. Il-pjattaforma tipprovdi ħafna opportunitajiet biex tgħaqqad il-funzjonijiet u l-estensjonijiet tiegħek stess, iżda dan kollu jsir f'Java. Huwa tassew?

Le! Fil-fatt, tista 'faċilment tmexxi Camunda mingħajr ebda għarfien Java u twaqqaf l-arkitettura għall-kodiċi fi kwalunkwe lingwa tal-għażla tiegħek. F'dan l-artikolu, se nħarsu lejn:

  • arkitettura bażika;
  • REST API
  • pariri dwar libreriji tal-klijenti eżistenti għal lingwi minbarra Java;
  • eżempju bl-użu ta 'C# u Node.JS;
  • modi kif tibda s-server Camunda (Docker jew Tomcat).

arkitettura

Camunda hija miktuba bil-Java u teħtieġ Java Virtual Machine (JVM) biex taħdem. Camunda jipprovdi REST API li jippermettilek tikteb fi kwalunkwe lingwa li tixtieq u tuża REST ma' Camunda:

L-użu ta' Camunda għal orkestrazzjoni faċli bbażata fuq REST u Workflow Engine (mhux Java)

Il-flussi tax-xogħol f'Camunda huma definiti f'BPMN, li bażikament huwa fajl XML. Jista 'jiġi mmudellat bi Camunda Modeler.

Tmexxi Camunda permezz ta 'immaġni Docker mibnija minn qabel

L-eħfef mod biex tmexxi Camunda huwa li tuża Docker. Modi alternattivi biex tniedi Camunda huma deskritti aktar tard f'dan l-artikolu.

L-użu ta' Camunda għal orkestrazzjoni faċli bbażata fuq REST u Workflow Engine (mhux Java)

F'dan il-każ, sempliċement mexxi:

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

M'għandekx għalfejn tinkwieta dwar Linux, JVMs jew Tomcats. Dockerfiles u dokumentazzjoni bażika (per eżempju, struzzjonijiet għall-konnessjoni mad-databases meħtieġa) huma disponibbli fuq GitHub.

Jekk trid tmexxi Camunda Enterprise Edition tista' faċilment tibdel dockerfile.

Madankollu, it-tmexxija ta' Camunda ma' Docker għandha żvantaġġ wieħed: tispiċċa b'verżjoni ta' Tomcat li mhux dejjem tinkludi l-aħħar soluzzjoni. Biex taħdem madwar dan, tista 'toħloq l-immaġni Docker tiegħek stess ibbażata fuq id-distribuzzjoni Tomcat mixtieqa, kif muri f'dan l-eżempju, jew tuża waħda mis-soluzzjonijiet deskritti hawn taħt.

Skjerament tal-Mudell tal-Proċess

Ejja nħarsu lejn eżempju bl-użu tal-mudell Saga għal prenotazzjoni ta' vjaġġ klassiku fejn trid tiskatta tliet azzjonijiet wara xulxin u tikkumpensa b'mod grazzjuż għal azzjonijiet kompluti b'suċċess f'każ ta' falliment aktar tard. Rappreżentat fil-forma BPMN, jidher bħal dan:

L-użu ta' Camunda għal orkestrazzjoni faċli bbażata fuq REST u Workflow Engine (mhux Java)

Issa tista 'tuża REST API għall-iskjerament tal-mudell tal-proċess. Ejja ngħidu li ssalvaha bħala trip.bpmn u tmexxi Camunda permezz ta' Docker sabiex tkun disponibbli fuq 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

Issa tista 'taħdem każijiet ġodda tal-fluss tax-xogħol billi tuża l-API REST u tgħaddi d-dejta li trid tara bħala varjabbli tal-istanza tal-fluss tax-xogħol:

  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

Il-mistoqsija interessanti li jmiss hija: kif Camunda jsejjaħ proċeduri bħall-ibbukkjar ta' karozza? Camunda tista 'mhux biss issejjaħ servizzi immedjatament (Push-Principe) bl-użu ta' xi built-in konnetturi, iżda wkoll poġġi oġġetti tax-xogħol f'tip ta 'ordni integrata. Il-ħaddiem imbagħad jista' jġib oġġetti tax-xogħol permezz ta' REST, iwettaq ix-xogħol, u jgħid lil Camunda biex tlesti (Pull-Prinċipju).

L-użu ta' Camunda għal orkestrazzjoni faċli bbażata fuq REST u Workflow Engine (mhux Java)

Allura l-ewwel trid tesegwixxi fetchAndLock (għax ħaddiema oħra jistgħu jirċievu kompiti fl-istess ħin biex iskala s-sistema):

  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

Imbagħad għid lil Camunda hekk ħaddiem temm ix-xogħol (innota li trid iddaħħal l-id tal-kompitu estern li tirċievi fl-ewwel talba):

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

Dak hu - għadek m'għandek bżonn l-ebda Java, hux? U dan huwa biżżejjed biex tibda!

Libreriji Klijenti

Is-sejħa ta' REST API hija faċli fi kwalunkwe lingwa ta' programmar. F'JavaScript, dan isir b'mod konvenjenti billi tuża JQuery, u f'C#, billi tuża System.Net.Http u Newtonsoft.Json. Iżda dan se jieħu ż-żmien. Allura tista 'sempliċement tuża xi librerija tal-klijenti.

Bħalissa, diversi libreriji tal-klijenti lesti huma disponibbli:

  • javascript: rabta. Appoġġjat minn Camunda;
  • Java: rabta. Appoġġjat minn Camunda;
  • C #:rabta и rabta. Dawn iż-żewġ proġetti huma fi stat intermedju u prattikament inattivi, iżda jistgħu jservu bħala punt ta’ tluq tajjeb;
  • PHP: rabta - mhux komplut wisq u ma jinkludix l-aħħar bidliet fl-API, imma naf proġetti li jużawha.

Bl-eċċezzjoni ta' JavaScript u Java, il-libreriji tal-klijenti mhumiex parti mill-prodott Camunda innifsu. Tistenniex li jappoġġjaw il-karatteristiċi kollha tal-API REST ta' Camunda. Sempliċement għax librerija ma tipprovdix ċerta funzjoni ma jfissirx li mhix hemm, dejjem iċċekkja l-API REST ta' Camunda. Proġetti ta' referenza jużaw libreriji bħala punt tat-tluq u mudell.

Eżempju C#

Bl-użu tal-librerija tal-klijenti ta 'hawn fuq, nistgħu sempliċement niktbu:

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

Il-kodiċi tas-sors li jaħdem bis-sħiħ jista' jinstab online: rabta. Eżempju ieħor huwa disponibbli fuq rabta.

Eżempju b'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();

Aktar informazzjoni tista’ tinstab fuq il-websajt Github.com

Modi Alternattivi biex Tniedi Camunda

Immaġni tad-Docker apposta bi "Camunda waħedha GWERRA"

Bħala alternattiva għal immaġni Docker mibnija minn qabel minn Camunda, tista 'tipprepara Tomcat lilek innifsek (per eżempju, ibbażat fuq l-immaġni uffiċjali Docker Tomcat) u mbagħad tikkopja lil Camunda fiha bħala wieħed mill-hekk imsejħa fajls WAR.

L-użu ta' Camunda għal orkestrazzjoni faċli bbażata fuq REST u Workflow Engine (mhux Java)

Jekk għandek ħafna rekwiżiti addizzjonali u tista 'twaqqaf ambjent ta' bini Java, tista 'wkoll twaqqaf Camunda Standalone war. Waqqa 'Maven build bħal f'dawn l-eżempji: build Maven b'konfigurazzjoni tal-gwerra jew assemblaġġ Maven ma Overlay.

Nibdew id-distribuzzjoni Camunda Tomcat

Għażla oħra hija li sempliċiment tniżżel id-distribuzzjoni Camunda Tomcat, tħollha, u tħaddem. Dan jeħtieġ biss il-Java Runtime Environment (JRE) installat fuq il-kompjuter tiegħek. Jista 'jkun faċilment niżżel minn hawn.

L-użu ta' Camunda għal orkestrazzjoni faċli bbażata fuq REST u Workflow Engine (mhux Java)

Sabiex tibdel id-database jew tagħmel xi ħaġa oħra trid tikkonfigura Tomcat bħal deskritt fid-dokumentazzjoni. Naf li Tomcat jista 'ħoss ikkumplikat, iżda fil-fatt huwa sempliċi ħafna. U Google jaf it-tweġibiet għal dak kollu li jista 'jkun meħtieġ fil-proċess.

Tmexxi Camunda bl-użu ta' Tomcat

L-aħħar alternattiva hija li twaqqaf Tomcat lilek innifsek u tinstalla Camunda fih, wara d-deskrizzjoni tal-installazzjoni. Dan jagħtik l-għażla li tuża kwalunkwe verżjoni ta' Tomcat li tippreferi, jew tinstallaha bħala servizz tal-Windows, pereżempju.

Tnedija ta' Camunda fil-produzzjoni

Dan normalment jeħtieġ xi setup finali biex imexxi Camunda. Hemm linji gwida f'Camunda li jiddeskrivu dan fid-dettall kbir, iżda mhux se nidħol fihom f'dan l-artikolu - se nsemmi eżempju wieħed biss: l-API REST tad-distribuzzjoni mhix konfigurata għall-awtentikazzjoni b'mod awtomatiku. Inti tista 'tixtieq li tibdel dan.

Bħala sinteżi-up

Kif tistgħu taraw, huwa faċli ħafna li tibda b'Camunda, irrispettivament mill-lingwa li tkun qed tuża. Il-punt ewlieni huwa li l-interazzjoni kollha ssir permezz tal-API REST. L-installazzjoni hija pjuttost faċli wkoll, speċjalment meta tuża Docker.

Sors: www.habr.com

Żid kumment