Fa'aaogaina o le Camunda mo le fa'avasegaina faigofie e fa'avae i luga ole REST ma le Su'esu'ega o Galuega (leai se Java)

Ei Habr! Ou te faailoa atu ia te outou le faaliliuga o le tusiga "Faʻaaoga Camunda o se faʻaoga faʻaoga faʻavae REST ma faʻaogaina afi (e aunoa ma le paʻi i Java)" saunia e Bernd Rücker.

07.07.2020/XNUMX/XNUMX, fa'aliliuga tusiga Bernd Rücker

Fa'aaogaina o le Camunda mo le fa'avasegaina faigofie e fa'avae i luga ole REST ma le Su'esu'ega o Galuega (leai se Java)

E masani ona ou talanoaina le fausaga o le microservice ma tagata e le o ni Java: C#, Node.JS/JavaScript developers, poʻo Golang enthusiasts. O i latou uma o loʻo feagai ma le mea moni latou te manaʻomia se masini faʻapipiʻi i totonu o le microservice architecture pe naʻo se meafaigaluega e faʻamalieina ai le galuega ma maua ai le tomai e faʻatonu ai, faʻatautaia taimi, Saga ma fefaʻatauaʻiga tau.

BPM tulaga ma puna tatala mai Camunda lelei mo galuega faapena. O le faauo a le atina'e o se tasi lea o vaega taua o le oloa. Ae afai e te vaʻavaʻai i ana faʻamaumauga, atonu e te maua le lagona o le faʻafeiloaʻiga a Camunda e faʻatatau i Java developers. O le faʻavae e maua ai le tele o avanoa e faʻafesoʻotaʻi ai au lava galuega ma faʻaopoopoga, ae o loʻo faia uma i Java. E moni ea?

Leai! O le mea moni, e faigofie ona e taʻavale Camunda e aunoa ma se malamalama Java ma faʻapipiʻi le fausaga e faʻailoga i soʻo se gagana e te filifilia. I lenei tusiga o le a tatou vaʻai i:

  • fausaga faavae;
  • MALOLO API;
  • fautuaga ile faletusi o lo'o iai mo gagana e ese mai Java;
  • faʻataʻitaʻiga o le faʻaaogaina o C # ma Node.JS;
  • auala e faʻatautaia ai le server Camunda (Docker poʻo Tomcat).

atiga

Camunda ua tusia i Java ma e manaʻomia se Java Virtual Machine (JVM) e tamoe. Ua saunia e Camunda se REST API e mafai ai ona e tusitusi i soʻo se gagana e te manaʻo ai ma faʻaoga REST ma Camunda:

Fa'aaogaina o le Camunda mo le fa'avasegaina faigofie e fa'avae i luga ole REST ma le Su'esu'ega o Galuega (leai se Java)

O galuega i Camunda o loʻo faʻamatalaina i le BPMN, o lona uiga o se faila XML. E mafai ona faʻataʻitaʻiina e faʻaaoga Camunda Fa'ata'ita'i.

Faʻatautaia Camunda e ala i se ata Docker na fausia muamua

O le auala pito sili ona faigofie e taʻavale ai Camunda o le faʻaaogaina lea o Docker. O isi auala e faʻatautaia ai Camunda o loʻo faʻamatalaina mulimuli ane i lenei tusiga.

Fa'aaogaina o le Camunda mo le fa'avasegaina faigofie e fa'avae i luga ole REST ma le Su'esu'ega o Galuega (leai se Java)

I lenei tulaga, tau lava o le tamoe:

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

E te le tau popole e uiga i Linux, Java Virtual Machines poʻo Tomcats. Dockerfiles ma faʻamaumauga autu (mo se faʻataʻitaʻiga, faʻatonuga mo le faʻafesoʻotaʻi i faʻamaumauga manaʻomia) o loʻo avanoa ile Github.

Afai e te manaʻo e taʻavale Camunda Enterprise Edition, e faigofie ona e sui faila faila.

Ae ui i lea, o loʻo i ai le tasi i lalo i le faʻaogaina o Camunda ma Docker: o le ae faʻamutaina se faʻamatalaga o Tomcat e le o taimi uma e aofia ai mea fou. Ina ia faʻataʻamilo i lenei mea, e mafai ona e fatuina se ata Docker oe lava e faʻavae i luga o le tufatufaina o Tomcat manaʻomia, e pei ona faʻaalia i lenei faʻataʻitaʻiga, pe faʻaaoga se tasi o fofo o loʻo faʻamatalaina i lalo.

Fa'atulagaina o se Fa'ata'ita'iga Fa'agasologa

Se'i o tatou va'ai i se fa'ata'ita'iga e fa'aaoga ai le fa'ata'ita'iga Saga mo se fa'ailoga masani o femalagaaiga e te mana'o e fa'atupu ai ni gaioiga se tolu ma fa'amalieina le taui o gaioiga manuia pe a o'o i se fa'aletonu mulimuli ane. Tuuina atu i le BPMN foliga, e pei o lenei:

Fa'aaogaina o le Camunda mo le fa'avasegaina faigofie e fa'avae i luga ole REST ma le Su'esu'ega o Galuega (leai se Java)

O lea e mafai ona e faʻaaogaina REST API mo le fa'atinoina o fa'ata'ita'iga. Fa'apea na e fa'asaoina e pei o trip.bpmn ma tamo'e Camunda e ala i Docker ina ia maua i 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

O lea ua mafai ona e tamoe fa'asologa fou o galuega fa'aaoga le REST API ma pasi fa'amaumauga e te mana'o e va'ai i ai e fai ma suiga o fa'ata'ita'iga o galuega:

  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

O le isi fesili manaia o le fa'afefea ona fa'aosoina e Camunda faiga e pei o le tusiina o se ta'avale? E le gata ina mafai e Camunda ona valaau vave auaunaga (Push-Principle), e faʻaaoga ai nisi ua fausia i totonu feso'ota'iga, ae tu'u fo'i mea faigaluega i totonu o se ituaiga fa'apipi'i i totonu. Ona mafai lea e le tagata faigaluega ona maua mea faigaluega e ala i le REST, faatino le galuega, ma lipoti atu le maeʻa i Camunda (Pull-Principle).

Fa'aaogaina o le Camunda mo le fa'avasegaina faigofie e fa'avae i luga ole REST ma le Su'esu'ega o Galuega (leai se Java)

O lea e tatau ona e faia muamua fetchAndLock (talu ai e mafai e isi tagata faigaluega ona maua galuega i le taimi e tasi e fua ai le faiga):

  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

Ona taʻu atu lea ia Camunda ua maea galuega a le tagata faigaluega (ia matau e tatau ona e ulufale i le ID galuega i fafo na maua i le talosaga muamua):

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

O le mea lena - e te leʻi manaʻomia se Java i le taimi nei, saʻo? Ma ua lava lena e amata ai!

Client Library

Vala'au le REST API e faigofie i so'o se gagana polokalame. I le JavaScript e faigofie ona fai lenei mea e faʻaaoga ai le JQuery, ma i le C # e mafai ona e faʻaogaina System.Net.Http ma Newtonsoft.Json. Ae o le a umi se taimi. E mafai la ona e fa'aogaina se faletusi a tagata fa'atau.

O lo'o iai i le taimi nei le tele o faletusi a le au faipisinisi o lo'o avanoa:

  • Javascript: ссылка. Lagolago e Camunda;
  • Java: ссылка. Lagolago e Camunda;
  • C #:ссылка и ссылка. O nei galuega uma e lua o loʻo i totonu o se tulaga vavalalata ma e toetoe a leai se gaioiga, ae mafai ona avea o se amataga lelei;
  • PHP: ссылка e le o se faletusi atoatoa ma e le aofia ai suiga fou API, ae ou te iloa galuega faatino e faʻaaogaina.

Vagana ai le Javascript ma le Java, o faletusi a tagata o tausia e le o se vaega o le oloa a Camunda lava ia. Aua le fa'amoemoe latou te lagolagoina uma fa'aaliga REST API a Camunda. Ona e le o maua e le faletusi se vaega patino e le o lona uiga e leai, siaki pea le Camunda REST API. O galuega masani e fa'aaogaina faletusi e fai ma amataga ma fa'ata'ita'iga.

Fa'ata'ita'iga ile C#

I le faʻaaogaina o le faletusi o loʻo i luga, e mafai ona matou tusia:

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

E mafai ona maua i luga ole laiga i luga ole laiga: ссылка. O loʻo maua se isi faʻataʻitaʻiga i ссылка.

Faataitaiga ma 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();

E mafai ona maua nisi fa'amatalaga ile upegatafa'ilagi github.com

Isi auala e amata ai Camunda

Ata fa'apitoa Docker fa'atasi ma le "Camunda standalone WAR"

I le avea ai ma se isi mea i le ata Docker muamua na fausia mai Camunda, e mafai ona e saunia Tomcat oe lava (mo se faʻataʻitaʻiga, faʻavae i luga o ata Docker Tomcat) ona kopi lea o Camunda i totonu o se tasi o faila faila WAR.

Fa'aaogaina o le Camunda mo le fa'avasegaina faigofie e fa'avae i luga ole REST ma le Su'esu'ega o Galuega (leai se Java)

Afai e tele au manaʻoga faʻaopoopo ma e mafai ona faʻapipiʻiina se siosiomaga fausia Java, e mafai foi ona e faʻatulagaina le taua a Camunda Standalone. Seti se fale Maven e pei o nei faʻataʻitaʻiga: fausia Maven faʻatasi ma le faʻatulagaina o taua po o le faapotopotoga Maven fa'atasi ma Fa'alava.

Tatalaina le tufatufaina o Camunda Tomcat

O le isi filifiliga o le naʻo le siiina mai o le tufatufaina o Camunda Tomcat, tatala ma taʻavale. Ina ia faia lenei mea, e te manaʻomia le Java Runtime Environment (JRE) faʻapipiʻi i lau komepiuta. E mafai ona faigofie download mai iinei.

Fa'aaogaina o le Camunda mo le fa'avasegaina faigofie e fa'avae i luga ole REST ma le Su'esu'ega o Galuega (leai se Java)

Ina ia suia le database pe fai se isi mea e te manaʻomia e faʻapipiʻi Tomcat pei faʻamatalaina i totonu o faʻamaumauga. Ou te iloa e foliga faigata Tomcat, ae e matua faigofie lava. Ma o Google e iai tali i mea uma e te manaʻomia i le faagasologa.

Ta'avale Camunda fa'aaoga Tomcat

Ole mea mulimuli ole faʻapipiʻi Tomcat oe lava ma faʻapipiʻi Camunda i totonu, mulimuli i le faʻamatalaga faʻapipiʻi. O lenei mea o le a tuʻuina atu ai ia te oe le avanoa e faʻaaoga ai soʻo se lomiga o Tomcat e te manaʻo ai, pe, mo se faʻataʻitaʻiga, faʻapipiʻi e avea o se auaunaga a le Windows.

Fa'alauiloa ole Camunda ile gaosiga

E masani lava, o le a manaʻomia oe e fai se seti mulimuli e faʻagasolo ai Camunda. Camunda o loʻo i ai taʻiala e faʻamatala auiliili ai lenei mea, ae o le a ou le paʻi atu ia i latou i lenei tusiga - O le a naʻo se tasi o faʻataʻitaʻiga: o le tufatufaina atu o le REST API e le o faʻatulagaina mo le faʻamaonia e ala i le faaletonu. Atonu e te mana'o e sui lenei mea.

Faʻaopoopo i luga

E pei ona e maitauina, o le amataina o Camunda e matua faigofie lava, e tusa lava po o le a le gagana e te faʻaaogaina. O le mea autu o fesoʻotaʻiga uma e faia i le REST API. O le faʻapipiʻiina e faigofie tele, aemaise lava pe a faʻaaoga Docker.

puna: www.habr.com

Faaopoopo i ai se faamatalaga