A’ cleachdadh Camunda airson orchestration furasta stèidhichte air REST agus Workflow Engine (no Java)

Hi Habr! Bidh mi a’ toirt d’ aire eadar-theangachadh an artaigil “Cleachd Camunda mar einnsean orchestration agus sruth-obrach stèidhichte air REST a tha furasta a chleachdadh (gun a bhith a’ beantainn ri Java)" le Bernd Rucker.

07.07.2020/XNUMX/XNUMX, eadar-theangachadh artaigilean Bernd Rucker

A’ cleachdadh Camunda airson orchestration furasta stèidhichte air REST agus Workflow Engine (no Java)

Bidh mi gu tric a’ bruidhinn air ailtireachd microservice le daoine nach eil ann an Java: luchd-leasachaidh C #, luchd-leasachaidh Node.JS/JavaScript, no luchd-leantainn Golang. Tha iad uile an aghaidh na fìrinn gu bheil feum aca air uidheamachd orcastra ann an ailtireachd microservice, no dìreach inneal gus an sruth-obrach a sgioblachadh agus a bhith comasach air òrdachadh, làimhseachadh ùine-ama, Saga agus gnothaichean dìolaidh.

Àrd-ùrlar BPM le stòr fosgailte bho Camunda math airson gnìomhan mar sin. Is e càirdeas luchd-leasachaidh aon de na prìomh fheartan den toradh. Ach ma choimheadas tu air na sgrìobhainnean aige, is dòcha gum faigh thu a’ bheachd gu bheil “càirdeas” Camunda ag amas gu sònraichte air luchd-leasachaidh Java. Tha an àrd-ùrlar a 'toirt seachad tòrr roghainnean airson na gnìomhan agus na leudachaidhean agad fhèin a cheangal, ach tha e uile air a dhèanamh ann an Java. A bheil e dha-rìribh?

Chan eil! Gu dearbh, is urrainn dhut Camunda a ruith gu furasta gun eòlas Java sam bith agus an ailtireachd airson còd a stèidheachadh ann an cànan sam bith de do roghainn. San artaigil seo, bheir sinn sùil air:

  • ailtireachd bunaiteach;
  • REST API
  • comhairle mu leabharlannan luchd-cleachdaidh a tha ann mar-thà airson cànanan a bharrachd air Java;
  • eisimpleir a' cleachdadh C# agus Node.JS;
  • dòighean air frithealaiche Camunda (Docker no Tomcat) a thòiseachadh.

ailtireachd

Tha Camunda sgrìobhte ann an Java agus feumaidh e Java Virtual Machine (JVM) airson a ruith. Tha Camunda a’ toirt seachad REST API a leigeas leat sgrìobhadh ann an cànan sam bith a thogras tu agus REST a chleachdadh le Camunda:

A’ cleachdadh Camunda airson orchestration furasta stèidhichte air REST agus Workflow Engine (no Java)

Tha sruthan-obrach ann an Camunda air am mìneachadh ann am BPMN, a tha gu bunaiteach na fhaidhle XML. Faodar a mhodail le Modailer Camunda.

A’ ruith Camunda tro ìomhaigh Docker a chaidh a thogail ro-làimh

Is e an dòigh as fhasa air Camunda a ruith Docker a chleachdadh. Tha dòighean eile air Camunda a chuir air bhog air am mìneachadh nas fhaide air adhart san artaigil seo.

A’ cleachdadh Camunda airson orchestration furasta stèidhichte air REST agus Workflow Engine (no Java)

Anns a 'chùis seo, dìreach ruith:

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

Cha leig thu leas a bhith draghail mu Linux, JVMs no Tomcats. Tha faidhlichean docker agus sgrìobhainnean bunaiteach (mar eisimpleir, stiùireadh airson ceangal ris na stòran-dàta riatanach) rim faighinn aig GitHub.

Ma tha thu airson Camunda Enterprise Edition a ruith faodaidh tu atharrachadh gu furasta Faidhle docker.

Ach, tha aon eas-bhuannachd aig a bhith a’ ruith Camunda le Docker: crìochnaichidh tu dreach de Tomcat nach bi an-còmhnaidh a’ toirt a-steach na fuasglaidhean as ùire. Gus obrachadh timcheall air seo, faodaidh tu an ìomhaigh Docker agad fhèin a chruthachadh stèidhichte air an cuairteachadh Tomcat a tha thu ag iarraidh, mar a chithear san eisimpleir seo, no cleachd aon de na fuasglaidhean a tha air am mìneachadh gu h-ìosal.

Cleachdadh Modail Pròiseas

Nach toir sinn sùil air eisimpleir a’ cleachdadh an teamplaid Saga airson turas clasaigeach a ghlèidheadh ​​far a bheil thu airson trì gnìomhan ann an sreath a bhrosnachadh agus dìoladh gu gràsmhor airson gnìomhan a chaidh a chrìochnachadh gu soirbheachail gun fhios nach fàilligeadh nas fhaide air adhart. Air a riochdachadh ann an cruth BPMN, tha e a’ coimhead mar seo:

A’ cleachdadh Camunda airson orchestration furasta stèidhichte air REST agus Workflow Engine (no Java)

A-nis faodaidh tu a chleachdadh REST API airson cleachdadh modail pròiseas. Canaidh sinn gun sàbhail thu e mar trip.bpmn agus ruith Camunda tro Docker gus am bi e ri fhaighinn air 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

A-nis faodaidh tu ruith eisimpleirean sruth-obrach ùra a’ cleachdadh an REST API agus cuir seachad an dàta a tha thu airson fhaicinn mar chaochladairean eisimpleir sruth-obrach:

  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

Is e an ath cheist inntinneach: ciamar a chanas Camunda modhan-obrach mar a bhith a’ gleidheadh ​​​​càr? Chan urrainn dha Camunda ach seirbheisean a ghairm sa bhad (Push-Principle) a’ cleachdadh cuid de luchd-togail a-steach luchd-ceangail, ach cuideachd cuir nithean obrach ann an seòrsa de dh’ òrdugh togte. Faodaidh an neach-obrach an uairsin stuthan obrach fhaighinn tro REST, an obair a dhèanamh, agus innse dha Camunda crìoch a chur air (Pull-Principle).

A’ cleachdadh Camunda airson orchestration furasta stèidhichte air REST agus Workflow Engine (no Java)

Mar sin feumaidh tu a chur an gnìomh an toiseach faighAndLock (oir faodaidh luchd-obrach eile gnìomhan fhaighinn aig an aon àm gus an siostam a sgèile):

  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

An uairsin innis dha Camunda sin neach-obrach crìoch a chur air obair (Thoir an aire gum feum thu an id gnìomh taobh a-muigh a fhuaireadh sa chiad iarrtas a chuir a-steach):

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

Sin agad e - chan eil feum agad air Java sam bith fhathast, ceart? Agus tha sin gu leòr airson tòiseachadh!

Leabharlannan Cliant

Tha e furasta fios a chuir gu REST API ann an cànan prògramadh sam bith. Ann an JavaScript, tha seo air a dhèanamh gu h-iomchaidh le bhith a’ cleachdadh JQuery, agus ann an C#, a’ cleachdadh System.Net.Http agus Newtonsoft.Json. Ach bheir seo ùine. Mar sin faodaidh tu dìreach cuid de leabharlann teachdaiche a chleachdadh.

Aig an àm seo, tha grunn leabharlannan luchd-cleachdaidh deiseil rim faighinn:

  • javascript: ceangal. Le taic bho Camunda;
  • Java: ceangal. Le taic bho Camunda;
  • C #:ceangal и ceangal. Tha an dà phròiseact seo ann an staid eadar-mheadhanach agus cha mhòr gun tàmh, ach faodaidh iad a bhith nan deagh thoiseach tòiseachaidh;
  • PHP: ceangal - chan eil e ro iomlan agus chan eil e a 'toirt a-steach na h-atharrachaidhean API as ùire, ach tha fios agam air pròiseactan a tha ga chleachdadh.

Ach a-mhàin JavaScript agus Java, chan eil na leabharlannan teachdaiche mar phàirt de thoradh Camunda fhèin. Na bi an dùil gun toir iad taic do na feartan REST API aig Camunda gu lèir. Dìreach air sgàth 's nach eil leabharlann a' toirt seachad gnìomh sònraichte chan eil sin a 'ciallachadh nach eil e ann, an-còmhnaidh thoir sùil air REST API aig Camunda. Bidh pròiseactan iomraidh a’ cleachdadh leabharlannan mar thoiseach tòiseachaidh agus teamplaid.

C# eisimpleir

A’ cleachdadh an leabharlann teachdaiche gu h-àrd, is urrainn dhuinn dìreach sgrìobhadh:

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

Gheibhear an còd stòr làn-obrach air-loidhne: ceangal. Tha eisimpleir eile ri fhaighinn aig ceangal.

Eisimpleir le 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();

Gheibhear barrachd fiosrachaidh air an làrach-lìn. github.com

Dòighean eile air Camunda a chuir air bhog

Ìomhaigh Custom Docker le "Camunda standalone WAR"

Mar roghainn eile an àite ìomhaigh Docker ro-thogte bho Camunda, faodaidh tu Tomcat ullachadh dhut fhèin (mar eisimpleir, stèidhichte air na h-ìomhaighean oifigeil Docker Tomcat) agus an uairsin lethbhreac a dhèanamh de Camunda a-steach dha mar aon de na faidhlichean WAR ris an canar.

A’ cleachdadh Camunda airson orchestration furasta stèidhichte air REST agus Workflow Engine (no Java)

Ma tha mòran riatanasan a bharrachd agad agus gun urrainn dhut àrainneachd togail Java a stèidheachadh, faodaidh tu cuideachd cogadh Camunda Standalone a stèidheachadh. Stèidhich togalach Maven mar anns na h-eisimpleirean seo: tog Maven le rèiteachadh cogaidh no co-chruinneachadh Maven le Overlay.

A 'tòiseachadh air cuairteachadh Camunda Tomcat

Is e roghainn eile dìreach an cuairteachadh Camunda Tomcat a luchdachadh sìos, a unzip, agus a ruith. Chan fheum seo ach an Java Runtime Environment (JRE) air a chuir a-steach air do choimpiutair. Faodaidh e a bhith gu furasta luchdachadh sìos bho seo.

A’ cleachdadh Camunda airson orchestration furasta stèidhichte air REST agus Workflow Engine (no Java)

Gus an stòr-dàta atharrachadh no rud sam bith eile a dhèanamh feumaidh tu leithid Tomcat a rèiteachadh air a mhìneachadh ann an sgrìobhainnean. Tha fios agam gur dòcha gu bheil Tomcat iom-fhillte, ach tha e gu math sìmplidh. Agus tha fios aig Google air na freagairtean airson a h-uile dad a dh ’fhaodadh a bhith riatanach sa phròiseas.

A 'ruith Camunda a' cleachdadh Tomcat

Is e an roghainn mu dheireadh Tomcat thu fhèin a stèidheachadh agus Camunda a chuir a-steach ann, a’ leantainn an tuairisgeul stàlaidh. Bheir seo an roghainn dhut an tionndadh de Tomcat as fheàrr leat a chleachdadh, no a stàladh mar sheirbheis Windows, mar eisimpleir.

Cur air bhog Camunda gu riochdachadh

Mar as trice bidh feum air suidheachadh deireannach gus Camunda a ruith. Tha stiùiridhean ann an Camunda a tha a’ toirt cunntas mionaideach air seo, ach cha tèid mi a-steach annta san artaigil seo - ainmichidh mi dìreach aon eisimpleir: chan eil REST API an t-sgaoilidh air a rèiteachadh airson dearbhadh gu bunaiteach. Is dòcha gu bheil thu airson seo atharrachadh.

A 'togail suas

Mar a chì thu, tha e gu math furasta tòiseachadh le Camunda, ge bith dè an cànan a tha thu a’ cleachdadh. Is e am prìomh phuing gu bheil a h-uile eadar-obrachadh air a dhèanamh tron ​​​​REST API. Tha an stàladh gu math furasta cuideachd, gu sònraichte nuair a bhios tu a’ cleachdadh Docker.

Source: www.habr.com

Cuir beachd ann