Defnyddio Camunda ar gyfer offeryniaeth hawdd yn seiliedig ar REST a Workflow Engine (dim Java)

Hei Habr! Cyflwynaf i'ch sylw gyfieithiad yr erthygl "Defnyddiwch Camunda fel peiriant cerddorfaol a llif gwaith hawdd ei ddefnyddio yn seiliedig ar REST (heb gyffwrdd â Java)" gan Bernd Rücker.

07.07.2020/XNUMX/XNUMX, cyfieithiad erthyglau Bernd Rucker

Defnyddio Camunda ar gyfer offeryniaeth hawdd yn seiliedig ar REST a Workflow Engine (dim Java)

Byddaf yn aml yn trafod pensaernïaeth microwasanaeth gyda phobl nad ydynt yn Java: datblygwyr C#, datblygwyr Node.JS/JavaScript, neu aficionados Golang. Mae pob un ohonynt yn wynebu'r ffaith bod angen mecanwaith cerddorfaol arnynt mewn pensaernïaeth microwasanaeth, neu dim ond offeryn i symleiddio'r llif gwaith ac ennill y gallu i archebu, trin goramser, Saga a gwneud iawn am drafodion.

Llwyfan BPM gyda ffynhonnell agored o Camunda gwych ar gyfer tasgau o'r fath. Mae cyfeillgarwch datblygwyr yn un o nodweddion allweddol y cynnyrch. Ond os edrychwch ar ei ddogfennaeth, efallai y cewch yr argraff bod "cyfeillgarwch" Camunda wedi'i anelu'n bennaf at ddatblygwyr Java. Mae'r platfform yn darparu llawer o opsiynau ar gyfer cysylltu eich swyddogaethau a'ch estyniadau eich hun, ond mae'r cyfan wedi'i wneud yn Java. Ydy e mewn gwirionedd?

Nac ydw! Yn wir, gallwch chi redeg Camunda yn hawdd heb unrhyw wybodaeth Java a sefydlu'r bensaernïaeth ar gyfer cod mewn unrhyw iaith o'ch dewis. Yn yr erthygl hon, byddwn yn edrych ar:

  • pensaernïaeth sylfaenol;
  • REST API
  • cyngor ar lyfrgelloedd cleientiaid presennol ar gyfer ieithoedd heblaw Java;
  • enghraifft gan ddefnyddio C# a Node.JS;
  • ffyrdd i gychwyn y gweinydd Camunda (Docker neu Tomcat).

pensaernïaeth

Mae Camunda wedi'i ysgrifennu yn Java ac mae angen Peiriant Rhithwir Java (JVM) i'w redeg. Mae Camunda yn darparu API REST sy'n eich galluogi i ysgrifennu mewn unrhyw iaith yr ydych yn ei hoffi a defnyddio REST gyda Camunda:

Defnyddio Camunda ar gyfer offeryniaeth hawdd yn seiliedig ar REST a Workflow Engine (dim Java)

Diffinnir llifoedd gwaith yn Camunda yn BPMN, sydd yn y bôn yn ffeil XML. Gellir ei fodelu gyda Modeler Camunda.

Yn rhedeg Camunda trwy ddelwedd Docker a adeiladwyd ymlaen llaw

Y ffordd hawsaf i redeg Camunda yw defnyddio Docker. Disgrifir ffyrdd amgen o lansio Camunda yn ddiweddarach yn yr erthygl hon.

Defnyddio Camunda ar gyfer offeryniaeth hawdd yn seiliedig ar REST a Workflow Engine (dim Java)

Yn yr achos hwn, yn syml rhedeg:

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

Does dim rhaid i chi boeni am Linux, JVMs neu Tomcats. Mae ffeiliau docwyr a dogfennaeth sylfaenol (er enghraifft, cyfarwyddiadau ar gyfer cysylltu â'r cronfeydd data gofynnol) ar gael yn Github.

Os ydych chi eisiau rhedeg Camunda Enterprise Edition gallwch chi newid yn hawdd Dockerfile.

Fodd bynnag, mae un anfantais i redeg Camunda gyda Docker: yn y pen draw bydd gennych fersiwn o Tomcat nad yw bob amser yn cynnwys yr atebion diweddaraf. I weithio o gwmpas hyn, gallwch greu eich delwedd Docker eich hun yn seiliedig ar y dosbarthiad Tomcat dymunol, fel y dangosir yn yr enghraifft hon, neu ddefnyddio un o'r atebion a ddisgrifir isod.

Defnyddio Model Proses

Gadewch i ni edrych ar enghraifft gan ddefnyddio'r templed Saga ar gyfer archebu taith glasurol lle rydych chi am sbarduno tri cham gweithredu yn olynol a gwneud iawn yn osgeiddig am gamau gweithredu a gwblhawyd yn llwyddiannus rhag ofn y bydd methiant diweddarach. Wedi'i gynrychioli ar ffurf BPMN, mae'n edrych fel hyn:

Defnyddio Camunda ar gyfer offeryniaeth hawdd yn seiliedig ar REST a Workflow Engine (dim Java)

Nawr gallwch chi ddefnyddio REST API ar gyfer defnyddio model proses. Gadewch i ni ddweud eich bod yn ei arbed fel trip.bpmn a rhedeg Camunda trwy Docker fel ei fod ar gael ar 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

Nawr gallwch chi redeg enghreifftiau llif gwaith newydd defnyddio'r API REST a phasio'r data rydych chi am ei weld fel newidynnau enghraifft llif gwaith:

  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

Y cwestiwn diddorol nesaf yw: sut mae Camunda yn galw gweithdrefnau fel archebu car? Gall Camunda nid yn unig ffonio gwasanaethau ar unwaith (Push-Principle) gan ddefnyddio rhai adeiledig cysylltwyr, ond hefyd yn rhoi eitemau gwaith mewn rhyw fath o drefn adeiledig. Yna gall y gweithiwr nôl eitemau gwaith trwy REST, perfformio'r gwaith, a dweud wrth Camunda i'w gwblhau (Tynnu-Principle).

Defnyddio Camunda ar gyfer offeryniaeth hawdd yn seiliedig ar REST a Workflow Engine (dim Java)

Felly yn gyntaf mae angen i chi weithredu nôlAndLock (oherwydd gall gweithwyr eraill dderbyn tasgau ar yr un pryd i raddfa'r system):

  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

Yna dywedwch wrth Camunda hynny gweithiwr wedi cwblhau gwaith (sylwch fod yn rhaid i chi nodi'r ID tasg allanol a dderbyniwyd yn y cais cyntaf):

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

Dyna ni - dydych chi dal heb fod angen unrhyw Java, iawn? Ac mae hynny'n ddigon i ddechrau!

Llyfrgelloedd Cleient

Mae galw API REST yn hawdd mewn unrhyw iaith raglennu. Yn JavaScript, gwneir hyn yn gyfleus gan ddefnyddio JQuery, ac yn C#, gan ddefnyddio System.Net.Http a Newtonsoft.Json. Ond bydd hyn yn cymryd amser. Felly gallwch chi ddefnyddio rhywfaint o lyfrgell cleientiaid.

Ar hyn o bryd, mae nifer o lyfrgelloedd parod i gleientiaid ar gael:

  • JavaScript: cyswllt. Cefnogir gan Camunda;
  • Java: cyswllt. Cefnogir gan Camunda;
  • C #:cyswllt и cyswllt. Mae'r ddau brosiect hyn mewn cyflwr canolraddol ac bron yn segur, ond gallant fod yn fan cychwyn da;
  • PHP: cyswllt - ddim yn rhy gyflawn ac nid yw'n cynnwys y newidiadau API diweddaraf, ond gwn am brosiectau sy'n ei ddefnyddio.

Ac eithrio JavaScript a Java, nid yw'r llyfrgelloedd cleientiaid yn rhan o gynnyrch Camunda ei hun. Peidiwch â disgwyl iddynt gefnogi holl nodweddion REST API Camunda. Nid yw'r ffaith nad yw llyfrgell yn darparu nodwedd benodol yn golygu nad yw yno, edrychwch bob amser ar API REST Camunda. Mae prosiectau cyfeirio yn defnyddio llyfrgelloedd fel man cychwyn a thempled.

C# enghraifft

Gan ddefnyddio'r llyfrgell cleientiaid uchod, gallwn ysgrifennu'n syml:

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

Gellir dod o hyd i'r cod ffynhonnell sy'n gweithio'n llawn ar-lein: cyswllt. Mae enghraifft arall ar gael yn cyswllt.

Enghraifft gyda 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();

Ceir rhagor o wybodaeth ar y wefan github.com

Ffyrdd Amgen o Lansio Camunda

Delwedd Custom Docker gyda "Camunda standalone WAR"

Fel dewis arall yn lle delwedd Docker a adeiladwyd ymlaen llaw o Camunda, gallwch chi baratoi Tomcat eich hun (er enghraifft, yn seiliedig ar ddelweddau swyddogol Docker Tomcat) ac yna copïo Camunda i mewn iddo fel un o'r ffeiliau RHYFEL fel y'u gelwir.

Defnyddio Camunda ar gyfer offeryniaeth hawdd yn seiliedig ar REST a Workflow Engine (dim Java)

Os oes gennych lawer o ofynion ychwanegol ac yn gallu sefydlu amgylchedd adeiladu Java, gallwch hefyd sefydlu rhyfel Camunda Standalone. Sefydlwch adeilad Maven fel yn yr enghreifftiau hyn: adeiladu Maven gyda ffurfwedd rhyfel neu gynulliad Maven gyda throshaen.

Dechrau dosbarthiad Camunda Tomcat

Opsiwn arall yw lawrlwytho dosbarthiad Camunda Tomcat, ei ddadsipio, a'i redeg. Dim ond yr Amgylchedd Runtime Java (JRE) sydd ei angen ar eich cyfrifiadur i wneud hyn. Gall fod yn hawdd lawrlwytho oddi yma.

Defnyddio Camunda ar gyfer offeryniaeth hawdd yn seiliedig ar REST a Workflow Engine (dim Java)

Er mwyn newid y gronfa ddata neu wneud unrhyw beth arall, mae angen i chi ffurfweddu tebyg i Tomcat a ddisgrifir yn y ddogfennaeth. Rwy'n gwybod y gallai Tomcat swnio'n gymhleth, ond mewn gwirionedd mae'n syml iawn. Ac mae Google yn gwybod yr atebion i bopeth a allai fod yn ofynnol yn y broses.

Rhedeg Camunda gan ddefnyddio Tomcat

Y dewis arall olaf yw sefydlu Tomcat eich hun a gosod Camunda ynddo, yn dilyn y disgrifiad gosod. Bydd hyn yn rhoi'r opsiwn i chi ddefnyddio pa fersiwn bynnag o Tomcat sydd orau gennych, neu ei osod fel gwasanaeth Windows, er enghraifft.

Lansio Camunda i gynhyrchu

Bydd hyn fel arfer angen rhywfaint o setup terfynol i redeg Camunda. Mae yna ganllawiau yn Camunda sy'n disgrifio hyn yn fanwl iawn, ond ni fyddaf yn mynd i mewn iddynt yn yr erthygl hon - byddaf yn enwi dim ond un enghraifft: nid yw API REST y dosbarthiad wedi'i ffurfweddu ar gyfer dilysu yn ddiofyn. Efallai y byddwch am newid hyn.

Wrth grynhoi

Fel y gwelwch, mae'n hawdd iawn dechrau gyda Camunda, waeth pa iaith rydych chi'n ei defnyddio. Y pwynt allweddol yw bod yr holl ryngweithio yn cael ei wneud trwy'r API REST. Mae gosod yn eithaf hawdd hefyd, yn enwedig wrth ddefnyddio Docker.

Ffynhonnell: hab.com

Ychwanegu sylw