Bikaranîna Camunda ji bo orkestrasyona hêsan a li ser bingeha REST û Motora Xebatê (bê Java)

Hey Habr! Wergera gotarê pêşkêşî we dikim "Camunda-ê wekî orkestrasyona-based REST-a-karanîna hêsan û motora xebatê (bêyî ku dest bi Java-yê bike) bikar bînin" Bernd Rücker.

07.07.2020/XNUMX/XNUMX, werger gotar Bernd Rucker

Bikaranîna Camunda ji bo orkestrasyona hêsan a li ser bingeha REST û Motora Xebatê (bê Java)

Ez pir caran bi mirovên li derveyî Java re mîmariya mîkro-xizmetê nîqaş dikim: Pêşdebirên C#, pêşdebirên Node.JS/JavaScript, an hezkiriyên Golang. Hemî ew bi vê rastiyê re rû bi rû ne ku ew hewceyê mekanîzmayek orkestrasyonê di mîmariya mîkro-xizmetê de, an tenê amûrek ji bo rêkûpêkkirina xebata xebatê û bidestxistina kapasîteya fermankirinê, birêvebirina demajoyan, Saga û danûstendinên tezmînatê ne.

platforma BPM bi çavkaniya vekirî ji Camunda ji bo karên weha mezin e. Dostaniya pêşdebiran yek ji taybetmendiyên sereke yên hilberê ye. Lê heke hûn li belgeyên wê mêze bikin, dibe ku hûn têgihîştin ku "dostaniya" Camunda bi giranî ji pêşdebirên Java-yê re tê armanc kirin. Platform ji bo girêdana fonksiyon û pêvekên xwe gelek vebijarkan peyda dike, lê ew hemî di Java-yê de pêk tê. Ma ew bi rastî?

Na! Bi rastî, hûn dikarin bi hêsanî Camunda bêyî zanîna Java-yê bimeşînin û mîmariya kodê bi her zimanî bijartina xwe saz bikin. Di vê gotarê de, em ê binêrin:

  • mîmariya bingehîn;
  • REST API
  • şîret li ser pirtûkxaneyên xerîdar ên heyî yên ji bo zimanên ji bilî Java;
  • nimûne bikaranîna C# û Node.JS;
  • awayên destpêkirina servera Camunda (Docker an Tomcat).

avakarî

Camunda bi Java-yê hatiye nivîsandin û ji bo xebitandinê pêdivî bi Makîneyek Virtual a Java (JVM) heye. Camunda REST API peyda dike ku dihêle hûn bi her zimanî ku hûn dixwazin binivîsin û REST bi Camunda re bikar bînin:

Bikaranîna Camunda ji bo orkestrasyona hêsan a li ser bingeha REST û Motora Xebatê (bê Java)

Karûbarên li Camunda di BPMN de, ku bi bingehîn pelek XML-ê ye, têne destnîşan kirin. Ew dikare bi modela Camunda Modeler.

Camunda bi navgîniya wêneyek Docker-a-pêş-avakirî ve dimeşîne

Rêya herî hêsan a meşandina Camunda karanîna Docker e. Rêbazên alternatîf ên destpêkirina Camunda paşê di vê gotarê de têne vegotin.

Bikaranîna Camunda ji bo orkestrasyona hêsan a li ser bingeha REST û Motora Xebatê (bê Java)

Di vê rewşê de, bi tenê rêve bikin:

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

Hûn ne hewce ne ku ji Linux, JVM an Tomcats xemgîn bibin. Dockerfiles û belgeyên bingehîn (mînak, rêwerzên ji bo girêdana bi databasên pêwîst) li wir hene Github.

Heke hûn dixwazin Weşana Camunda Enterprise bimeşînin, hûn dikarin bi hêsanî biguherînin dockerfile.

Lêbelê, xebitandina Camunda bi Docker re yek xeletiyek heye: hûn ê bi guhertoyek Tomcat-ê ku her gav rastkirinên herî paşîn vedihewîne biqede. Ji bo ku hûn li dora vê yekê bixebitin, hûn dikarin wêneya xweya Docker-ê li ser bingeha belavkirina Tomcat-a xwestî biafirînin, wekî ku di vê nimûneyê de tê xuyang kirin, an jî yek ji çareseriyên ku li jêr têne destnîşan kirin bikar bînin.

Daxistina Modela Pêvajoyê

Ka em li mînakek bi karanîna şablona Saga-yê ji bo veqetandina rêwîtiyek klasîk a ku hûn dixwazin sê çalakiyan li pey hev bişopînin û di bûyera têkçûnek paşîn de çalakiyên bi serfirazî yên ku hatine qedandin bi dilovanî telafî bikin. Di forma BPMN de tê temsîl kirin, bi vî rengî xuya dike:

Bikaranîna Camunda ji bo orkestrasyona hêsan a li ser bingeha REST û Motora Xebatê (bê Java)

Niha hûn dikarin bikar bînin REST API ji bo bicîhkirina modela pêvajoyê. Ka em bibêjin hûn wê wekî trip.bpmn hilînin û Camunda bi rêya Docker-ê dimeşînin ji ber vê yekê ew li ser localhost heye: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

Niha hûn dikarin birevin mînakên xebata nû REST API-ê bikar bînin û daneyên ku hûn dixwazin wekî guhêrbarên mînaka xebatê bibînin derbas bikin:

  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

Pirsa balkêş a din ev e: Camunda çawa prosedurên mîna veqetandina gerîdeyê bang dike? Camunda ne tenê dikare yekser gazî karûbaran bike (Push-Principle) bi karanîna hin çêkirî connectors, lê di heman demê de tiştên xebatê jî bi rengek çêkirî bi cîh bikin. Dûv re xebatkar dikare bi REST-ê re tiştên xebatê bîne, xebatê pêk bîne, û ji Camunda re bêje ku temam bike (Prensîp-Pirnsîp).

Bikaranîna Camunda ji bo orkestrasyona hêsan a li ser bingeha REST û Motora Xebatê (bê Java)

Ji ber vê yekê pêşî hûn hewce ne ku bicîh bikin fetchAndLock (ji ber ku karkerên din dikarin di heman demê de peywiran bistînin da ku pergalê mezin bikin):

  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

Paşê ji Camunda re bêje karker karê xwe qedand (hişyar bikin ku divê hûn nasnameya karê derveyî ya ku di daxwaznameya yekem de hatî wergirtin têkevin):

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

Ew e - we hîn jî hewcedariya Java-yê nekiriye, rast? Û ji bo destpêkirinê bes e!

Pirtûkxaneyên Client

Banga REST API di her zimanê bernamekirinê de hêsan e. Di JavaScript de, ev bi hêsanî bi karanîna JQuery, û di C# de, bi System.Net.Http û Newtonsoft.Json ve tête kirin. Lê ev dê dem bigire. Ji ber vê yekê hûn dikarin tenê pirtûkxaneya xerîdar bikar bînin.

Heya nuha, çend pirtûkxaneyên xerîdar ên amade hene:

  • javascript: pirtûk. Piştgiriya Camunda;
  • Java: pirtûk. Piştgiriya Camunda;
  • C #:pirtûk и pirtûk. Ev her du proje di rewşek navîn de ne û di pratîkê de razayî ne, lê dikarin wekî destpêkek baş bin;
  • PHP: pirtûk - ne pir bêkêmasî ye û guheztinên herî dawî yên API-yê nagire, lê ez projeyên ku wê bikar tînin nas dikim.

Ji bilî JavaScript û Java, pirtûkxaneyên xerîdar ne beşek ji hilberê Camunda bixwe ne. Li bendê nebin ku ew piştgirî bidin hemî taybetmendiyên REST API-ya Camunda. Tenê ji ber ku pirtûkxaneyek fonksiyonek diyar peyda nake, nayê vê wateyê ku ew ne li wir e, her gav API-ya REST ya Camunda kontrol bikin. Projeyên referansê pirtûkxaneyan wekî destpêk û şablon bikar tînin.

Mînak C#

Bi karanîna pirtûkxaneya xerîdar a jorîn, em dikarin bi hêsanî binivîsin:

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

Koda çavkaniyê ya bi tevahî xebitîn dikare li serhêl were dîtin: pirtûk. Mînakek din li vir heye pirtûk.

Mînak bi 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();

Agahiyên bêtir li ser malperê têne dîtin github.com

Rêbazên Alternatîf ên Destpêkirina Camunda

Wêneyê Dockerê Xweser bi "Camunda standalone WAR"

Wekî alternatîfek ji wêneyek Docker-a pêş-avakirî ya ji Camunda, hûn dikarin Tomcat bi xwe amade bikin (mînak, li ser bingeha wêneyên fermî yên Docker Tomcat) û dûv re jî Camunda wekî yek ji wan pelên WAR-ê di nav wê de kopî bikin.

Bikaranîna Camunda ji bo orkestrasyona hêsan a li ser bingeha REST û Motora Xebatê (bê Java)

Ger we gelek hewcedariyên we hene û hûn dikarin hawîrdorek avahiyek Java saz bikin, hûn dikarin şerê Camunda Standalone jî saz bikin. Avakirinek Maven mîna van mînakan saz bikin: ava bikin Maven bi veavakirina şer an meclîsê Maven bi Overlay.

Destpêkirina belavkirina Camunda Tomcat

Vebijarkek din ev e ku meriv bi tenê belavkirina Camunda Tomcat dakêşîne, jê veke, û bimeşîne. Ev tenê pêdivî ye ku Java Runtime Environment (JRE) li ser komputera we hatî saz kirin. Ew dikare bi hêsanî be ji vir dakêşin.

Bikaranîna Camunda ji bo orkestrasyona hêsan a li ser bingeha REST û Motora Xebatê (bê Java)

Ji bo ku hûn databasê biguhezînin an tiştek din bikin, hûn hewce ne ku Tomcat mîna mîheng bikin di belgeyê de diyar kirin. Ez dizanim Tomcat dibe ku tevlihev xuya bike, lê bi rastî ew pir hêsan e. Û Google bersivên her tiştê ku dibe ku di pêvajoyê de hewce bike dizane.

Bi karanîna Tomcatê Camunda dimeşîne

Alternatîfa paşîn ev e ku hûn Tomcat bi xwe saz bikin û Camunda tê de saz bikin, li pey danasîna sazkirinê. Ev ê ji we re vebijarkê bide ku hûn guhertoya Tomcat-ê ku hûn tercîh dikin bikar bînin, an jî wek mînak wekî karûbarek Windows-ê saz bikin.

Destpêkirina Camunda di hilberînê de

Ev ê bi gelemperî hin sazûmanên paşîn hewce dike ku Camunda bimeşîne. Di Camunda de rêwerz hene ku vê yekê bi hûrgulî rave dikin, lê ez ê di vê gotarê de neçim nav wan - ez ê tenê mînakek nav bikim: REST API-ya belavkirinê ji hêla xwerû ve ji bo erêkirinê nehatiye mîheng kirin. Dibe ku hûn bixwazin vê biguherînin.

Hilberîn

Wekî ku hûn dikarin bibînin, pir hêsan e ku meriv bi Camunda re dest pê bike, bêyî ku zimanê ku hûn bikar tînin. Xala sereke ev e ku hemî têkilî bi navgîniya REST API ve tê kirin. Sazkirin jî pir hêsan e, nemaze dema ku Docker bikar bînin.

Source: www.habr.com

Add a comment