Mampiasa Camunda ho an'ny orkestra mora miorina amin'ny REST sy motera Workflow (tsy misy Java)

Hey Habr! Atolotro ho anareo ny fandikana ilay lahatsoratra "Ampiasao ny Camunda ho toy ny orkestra mora ampiasaina amin'ny REST sy motera workflow (tsy mikasika Java)" nataon'i Bernd Rücker.

07.07.2020/XNUMX/XNUMX, fandikan-teny lahatsoratra Bernd Rücker

Mampiasa Camunda ho an'ny orkestra mora miorina amin'ny REST sy motera Workflow (tsy misy Java)

Matetika aho no miresaka momba ny maritrano microservice miaraka amin'ny olona tsy Java: C#, Node.JS/JavaScript developers, na Golang enthusiasts. Izy rehetra dia miatrika ny zava-misy fa mila motera orkestra amin'ny maritrano microservice izy ireo na fitaovana tsotra hanamafisana ny fizotran'ny asa sy hahazoana fahafahana manafatra, mitantana ny fotoana, Saga ary manonitra ny fifanakalozana.

Sehatra BPM miaraka amin'ny loharano misokatra avy amin'ny Camunda tsara ho an'ny asa toy izany. Iray amin'ireo endri-javatra fototra amin'ny vokatra ny fahatsaran'ny mpamorona. Saingy raha mijery ny antontan-taratasiny ianao dia mety ho hitanao fa ny hatsaram-panahin'i Camunda dia natao indrindra ho an'ny mpamorona Java. Ny sehatra dia manome fahafahana maro hampifandray ny fiasanao sy ny fanitaranao manokana, saingy vita amin'ny Java daholo izany. Tena izany ve?

Tsia! Raha ny marina, azonao atao mora foana ny mampandeha ny Camunda tsy misy fahalalana Java ary manamboatra ny maritrano ho kaody amin'ny fiteny tianao. Ato amin'ity lahatsoratra ity isika dia hijery:

  • rafitra fototra;
  • REST API;
  • torohevitra momba ny tranomboky mpanjifa efa misy ho an'ny fiteny hafa ankoatry ny Java;
  • ohatra amin'ny fampiasana C# sy Node.JS;
  • fomba hampandehanana ny mpizara Camunda (Docker na Tomcat).

maritrano

Nosoratana amin'ny Java i Camunda ary mila Java Virtual Machine (JVM) mba hihazakazaka. Camunda dia manome REST API ahafahanao manoratra amin'ny fiteny tianao ary mampiasa REST miaraka amin'i Camunda:

Mampiasa Camunda ho an'ny orkestra mora miorina amin'ny REST sy motera Workflow (tsy misy Java)

Ny workflows ao Camunda dia voafaritra ao amin'ny BPMN, izay rakitra XML amin'ny ankapobeny. Afaka mampiasa modely izy io Modeler Camunda.

Mihazakazaka Camunda amin'ny alàlan'ny sary Docker efa namboarina

Ny fomba tsotra indrindra hampandehanana ny Camunda dia ny fampiasana Docker. Ny fomba hafa hampandehanana ny Camunda dia voalaza ato amin'ity lahatsoratra ity.

Mampiasa Camunda ho an'ny orkestra mora miorina amin'ny REST sy motera Workflow (tsy misy Java)

Amin'ity tranga ity, mihazakazaka fotsiny:

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

Tsy mila manahy momba ny Linux, Java Virtual Machines na Tomcats ianao. Ny dockerfiles sy ny antontan-taratasy fototra (ohatra, torolalana amin'ny fampifandraisana amin'ny angon-drakitra ilaina) dia hita ao amin'ny Github.

Raha te hampandeha ny Camunda Enterprise Edition ianao dia afaka miova mora foana dockerfile.

Na izany aza, misy ny lafy ratsiny amin'ny fampandehanana an'i Camunda amin'ny fampiasana Docker: ianao dia hiafara amin'ny dikan-teny Tomcat izay tsy ahitana ny fanamboarana farany. Mba hahazoana izany, afaka mamorona sary Docker ianao mifototra amin'ny fizarana Tomcat tadiavina, araka ny aseho amin'ity ohatra ity, na ampiasao ny iray amin'ireo vahaolana voalaza etsy ambany.

Mametraka Modely Process

Andeha hojerentsika ohatra iray amin'ny fampiasana ny maodely Saga ho an'ny famandrihana fitsangatsanganana mahazatra izay tianao hanentanana hetsika telo misesy ary hanonerana amim-pahamendrehana ny hetsika mahomby raha sendra misy tsy fahombiazana any aoriana. Aseho amin'ny endrika BPMN, toa izao:

Mampiasa Camunda ho an'ny orkestra mora miorina amin'ny REST sy motera Workflow (tsy misy Java)

Azonao ampiasaina izao REST API ho an'ny fametrahana modely amin'ny dingana. Andeha atao hoe notahirizinao ho trip.bpmn izany ary nihazakazaka Camunda tamin'ny alàlan'ny Docker mba hita ao amin'ny 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

Afaka mihazakazaka ianao izao toe-javatra vaovao workflow mampiasa ny REST API ary mampita ny angon-drakitra tianao ho hita amin'ny maha-variable ohatra ny workflow:

  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

Ny fanontaniana mahaliana manaraka dia ny fomba ampiasana ny fomba fiasa toy ny famandrihana fiara i Camunda? Camunda dia tsy afaka miantso avy hatrany ny serivisy (Push-Principle), amin'ny fampiasana sasany namboarina connectors, fa apetraho ao anatin'ny karazana filaharana voaorina ihany koa. Ny mpiasa dia afaka mahazo ny asa amin'ny alalan'ny REST, manatanteraka ny asa, ary mitatitra ny fahavitan'ny Camunda (Principle Pull).

Mampiasa Camunda ho an'ny orkestra mora miorina amin'ny REST sy motera Workflow (tsy misy Java)

Ka mila manao aloha ianao fetchAndLock (satria ny mpiasa hafa dia afaka mahazo asa miaraka amin'ny fampitomboana ny rafitra):

  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

Dia lazao amin'i Camunda izany nahavita ny asany ny mpiasa (mariho fa tsy maintsy miditra ny ID asa ivelany voaray tamin'ny fangatahana voalohany ianao):

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

Izay ihany - tsy mila Java ianao hatreto, sa tsy izany? Ary ampy ny manomboka izany!

Tranomboky mpanjifa

Ny fiantsoana ny REST API dia mora amin'ny fiteny fandaharana rehetra. Amin'ny JavaScript dia mety ny manao izany amin'ny JQuery, ary amin'ny C# dia azonao ampiasaina ny System.Net.Http sy Newtonsoft.Json. Mila fotoana anefa izany. Noho izany dia azonao atao ny mampiasa tranomboky mpanjifa sasany.

Amin'izao fotoana izao dia misy tranomboky mpanjifa efa vonona:

  • javascript: rohy. Tohanan'i Camunda;
  • Java: rohy. Tohanan'i Camunda;
  • C #:rohy и rohy. Ireo tetik'asa roa ireo dia ao anatin'ny fanjakana manelanelana ary saika tsy misy hetsika, fa azo ampiasaina ho toy ny fanombohana tsara;
  • PHP: rohy dia tsy tranomboky tena feno ary tsy ahitana ny fanovana API farany indrindra, fa mahafantatra tetikasa mampiasa azy aho.

Ankoatra ny JavaScript sy Java, ny tranomboky mpanjifa dia tsy anisan'ny vokatra Camunda mihitsy. Aza manantena azy ireo hanohana ny endri-javatra REST API rehetra an'i Camunda. Satria tsy manome endri-javatra iray ny tranomboky iray dia tsy midika izany fa tsy ao izany, jereo foana ny Camunda REST API. Ny tetikasa mahazatra dia mampiasa tranomboky ho toy ny fanombohana sy môdely.

Ohatra amin'ny C#

Amin'ny fampiasana ny tranomboky mpanjifa etsy ambony dia afaka manoratra tsotra izao isika:

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

Ny kaody loharano miasa feno dia azo jerena amin'ny Internet: rohy. Misy ohatra iray hafa hita ao amin'ny rohy.

Ohatra amin'ny 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();

Misy fampahalalana bebe kokoa azo jerena ao amin'ny tranokala github.com

Fomba hafa hanombohana Camunda

Sary Docker manokana miaraka amin'ny "Camunda standalone WAR"

Ho solon'ny sary Docker efa namboarina avy amin'ny Camunda, azonao atao ny manomana Tomcat ny tenanao (ohatra, mifototra amin'ny sary ofisialy Docker Tomcat) ary avy eo mandika Camunda ao anatiny ho iray amin'ireo antsoina hoe rakitra WAR.

Mampiasa Camunda ho an'ny orkestra mora miorina amin'ny REST sy motera Workflow (tsy misy Java)

Raha manana fepetra fanampiny maro ianao ary afaka manamboatra tontolo fananganana Java dia azonao atao koa ny manamboatra ady Camunda Standalone. Manangana fananganana Maven toy ny amin'ireto ohatra ireto: fananganana Maven miaraka amin'ny fanamafisana ady na fivoriambe Maven miaraka amin'ny Overlay.

Famoahana ny fizarana Camunda Tomcat

Safidy iray hafa dia ny misintona fotsiny ny fizarana Camunda Tomcat, sokafy ary amboary izany. Mba hanaovana izany dia mila ny Java Runtime Environment (JRE) napetraka ao amin'ny solosainao. Mety ho mora izany alaivo avy eto.

Mampiasa Camunda ho an'ny orkestra mora miorina amin'ny REST sy motera Workflow (tsy misy Java)

Raha hanova ny angon-drakitra na hanao zavatra hafa ianao dia mila manamboatra Tomcat tahaka voalaza ao amin'ny antontan-taratasy. Fantatro fa mety ho sarotra ny Tomcat, saingy tena tsotra izany. Ary Google dia manana ny valin'ny zavatra rehetra mety ilainao amin'ny dingana.

Mihazakazaka Camunda mampiasa Tomcat

Ny safidy farany dia ny manamboatra Tomcat ny tenanao ary mametraka Camunda ao, manaraka ny famaritana ny fametrahana. Izany dia hanome anao fahafahana hampiasa izay dikan-Tomcat tianao, na, ohatra, mametraka azy ho serivisy Windows.

Famoahana ny Camunda amin'ny famokarana

Amin'ny ankapobeny, mila manao fanamboarana farany ianao mba hampandeha an'i Camunda. Camunda dia manana torolalana mamaritra izany amin'ny antsipiriany, saingy tsy hikasika azy ireo amin'ity lahatsoratra ity aho - Hanome ohatra iray fotsiny aho: ny REST API amin'ny fizarana dia tsy namboarina ho an'ny fanamarinana amin'ny alàlan'ny default. Mety te hanova izany ianao.

Famintinana

Araka ny efa tsikaritrareo, ny fanombohana Camunda dia tena mora, na inona na inona fiteny ampiasainao. Ny teboka manan-danja dia ny fifandraisana rehetra dia atao amin'ny alàlan'ny REST API. Tsotra ihany koa ny fametrahana, indrindra rehefa mampiasa Docker.

Source: www.habr.com

Add a comment