Paggamit sa Camunda alang sa dali nga orkestra base sa REST ug Workflow Engine (walay Java)

Hoy Habr! Gipresentar ko sa imong pagtagad ang hubad sa artikulo "Gamita ang Camunda isip usa ka dali gamiton nga REST-based orchestration ug workflow engine (nga walay paghikap sa Java)" ni Bernd Rücker.

07.07.2020/XNUMX/XNUMX, paghubad mga artikulo Bernd Rucker

Paggamit sa Camunda alang sa dali nga orkestra base sa REST ug Workflow Engine (walay Java)

Kanunay nakong hisgutan ang arkitektura sa microservice uban sa mga dili Java nga mga tawo: C# developers, Node.JS/JavaScript developers, o Golang aficionados. Ang tanan kanila nag-atubang sa kamatuoran nga kinahanglan nila ang usa ka mekanismo sa orkestra sa usa ka arkitektura sa microservice, o usa lamang ka himan aron mapadali ang dagan sa trabaho ug makaangkon og abilidad sa pag-order, pagdumala sa mga timeout, Saga ug pagbayad sa mga transaksyon.

BPM plataporma nga adunay open source gikan sa Camunda maayo alang sa ingon nga mga buluhaton. Ang pagkamahigalaon sa developer usa sa mga nag-unang bahin sa produkto. Apan kung imong tan-awon ang dokumentasyon niini, mahimo nimong makuha ang impresyon nga ang "pagkamahigalaon" ni Camunda labi nga gitumong sa mga developer sa Java. Naghatag ang plataporma og daghang mga kapilian alang sa pagkonektar sa imong kaugalingon nga mga gimbuhaton ug mga extension, apan kini tanan nahimo sa Java. Tinuod ba kini?

Dili! Sa tinuud, dali ka makadagan sa Camunda nga wala’y kahibalo sa Java ug i-set up ang arkitektura para sa code sa bisan unsang lengguwahe nga imong gusto. Niini nga artikulo, atong tan-awon ang:

  • batakang arkitektura;
  • REST API
  • tambag sa kasamtangan nga mga librarya sa kliyente alang sa mga pinulongan gawas sa Java;
  • pananglitan sa paggamit sa C# ug Node.JS;
  • mga paagi sa pagpadagan sa Camunda server (Docker o Tomcat).

arkitektura

Ang Camunda gisulat sa Java ug nagkinahanglan og Java Virtual Machine (JVM) aron modagan. Naghatag ang Camunda og REST API nga nagtugot kanimo sa pagsulat sa bisan unsang pinulongan nga imong gusto ug gamiton ang REST sa Camunda:

Paggamit sa Camunda alang sa dali nga orkestra base sa REST ug Workflow Engine (walay Java)

Ang mga workflow sa Camunda gihubit sa BPMN, nga usa ka XML file. Mahimo kini nga modelo sa Modeler sa Camunda.

Pagpadagan sa Camunda pinaagi sa usa ka pre-built nga imahe sa Docker

Ang labing kadali nga paagi sa pagpadagan sa Camunda mao ang paggamit sa Docker. Ang mga alternatibong paagi sa pagpadagan sa Camunda gihulagway sa ulahi niini nga artikulo.

Paggamit sa Camunda alang sa dali nga orkestra base sa REST ug Workflow Engine (walay Java)

Sa kini nga kaso, pagdagan lang:

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

Dili ka kinahanglan mabalaka bahin sa Linux, JVMs o Tomcats. Ang mga dockerfile ug batakang dokumentasyon (pananglitan, mga panudlo alang sa pagkonektar sa gikinahanglan nga mga database) anaa sa Github.

Kung gusto nimo nga modagan ang Camunda Enterprise Edition dali ra nimo mabag-o Dockerfile.

Bisan pa, ang pagpadagan sa Camunda kauban ang Docker adunay usa ka kalisud: mahuman ka sa usa ka bersyon sa Tomcat nga dili kanunay naglakip sa labing bag-ong mga pag-ayo. Aron masulbad kini, mahimo ka maghimo sa imong kaugalingon nga imahe sa Docker base sa gusto nga pag-apod-apod sa Tomcat, sama sa gipakita sa kini nga pananglitan, o gamita ang usa sa mga solusyon nga gihulagway sa ubos.

Pag-deploy sa Modelo sa Proseso

Atong tan-awon ang usa ka pananglitan gamit ang template sa Saga alang sa usa ka klasiko nga pag-book sa biyahe diin gusto nimo nga mag-trigger sa tulo ka mga aksyon nga sunud-sunod ug maayo nga bayad alang sa malampuson nga nahuman nga mga aksyon kung adunay usa ka ulahi nga kapakyasan. Girepresentahan sa porma sa BPMN, ingon niini:

Paggamit sa Camunda alang sa dali nga orkestra base sa REST ug Workflow Engine (walay Java)

Karon mahimo nimong gamiton REST API alang sa pag-deploy sa modelo sa proseso. Ingnon ta nga i-save nimo kini isip trip.bpmn ug ipadagan ang Camunda pinaagi sa Docker aron magamit kini sa 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

Karon makadagan ka bag-ong mga higayon sa workflow gamit ang REST API ug ipasa ang datos nga gusto nimong makita isip mga variable sa instance sa 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

Ang sunod nga makapaikag nga pangutana mao: giunsa pagtawag ni Camunda ang mga pamaagi sama sa pag-book sa usa ka awto? Ang Camunda dili lang makatawag dayon sa mga serbisyo (Push-Principle) gamit ang pipila ka built-in mga konektor, apan ibutang usab ang mga butang sa trabaho sa usa ka matang sa built-in nga han-ay. Mahimong kuhaon sa trabahante ang mga butang sa trabaho pinaagi sa REST, ipahigayon ang trabaho, ug sultihan si Camunda sa pagkompleto (Pull-Principle).

Paggamit sa Camunda alang sa dali nga orkestra base sa REST ug Workflow Engine (walay Java)

Busa una kinahanglan nimo nga ipatuman fetchAndLock (tungod kay ang ubang mga trabahante makadawat og mga buluhaton sa samang higayon aron masukod ang sistema):

  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

Unya ingna si Camunda niana trabahante nakompleto ang trabaho (timan-i nga kinahanglan nimong isulod ang external task id nga nadawat sa unang hangyo):

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

Mao na - wala pa nimo kinahanglana ang bisan unsang Java, di ba? Ug kana igo na aron makasugod!

Mga Librarya sa Kliyente

Ang pagtawag sa REST API sayon ​​sa bisan unsang programming language. Sa JavaScript kombenyente ang pagbuhat niini gamit ang JQuery, ug sa C# mahimo nimong gamiton ang System.Net.Http ug Newtonsoft.Json. Apan magkinahanglan kini og panahon. Mao nga magamit ra nimo ang pipila nga librarya sa kliyente.

Sa pagkakaron, daghang andam nga mga librarya sa kliyente ang magamit:

  • javascript: link. Gisuportahan ni Camunda;
  • Java: link. Gisuportahan ni Camunda;
  • C #:link и link. Ang duha niini nga mga proyekto anaa sa usa ka intermediate nga kahimtang ug halos dili makatulog, apan mahimong magsilbi nga maayong punto sa pagsugod;
  • PHP: link - dili kaayo kompleto ug wala maglakip sa pinakabag-o nga mga pagbag-o sa API, apan nahibal-an ko ang mga proyekto nga naggamit niini.

Gawas sa JavaScript ug Java, ang mga librarya sa kliyente dili bahin sa produkto sa Camunda mismo. Ayaw pagdahum nga suportahan nila ang tanan nga mga bahin sa REST API sa Camunda. Tungod kay ang usa ka librarya wala maghatag usa ka piho nga function wala magpasabut nga wala kini didto, susiha kanunay ang REST API sa Camunda. Ang mga proyekto sa pakisayran naggamit sa mga librarya isip usa ka punto sa pagsugod ug template.

Pananglitan sa C#

Gamit ang librarya sa kliyente sa ibabaw, mahimo ra naton isulat:

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

Ang bug-os nga nagtrabaho nga source code makita online: link. Ang laing pananglitan anaa sa link.

Pananglitan sa 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();

Dugang nga impormasyon makita sa website Github.com

Alternatibong Paagi sa Paglunsad sa Camunda

Pasadya nga imahe sa Docker nga adunay "Camunda standalone WAR"

Isip usa ka alternatibo sa usa ka pre-built nga imahe sa Docker gikan sa Camunda, mahimo nimong andamon ang Tomcat sa imong kaugalingon (pananglitan, base sa opisyal nga mga imahe sa Docker Tomcat) ug dayon kopyaha ang Camunda niini isip usa sa gitawag nga WAR files.

Paggamit sa Camunda alang sa dali nga orkestra base sa REST ug Workflow Engine (walay Java)

Kung ikaw adunay daghang dugang nga mga kinahanglanon ug mahimo nimong i-set up ang usa ka palibot sa pagtukod sa Java, mahimo ka usab nga mag-set up sa gubat sa Camunda Standalone. Paghimo og usa ka Maven nga pagtukod sama niini nga mga pananglitan: pagtukod Maven nga adunay war config o asembliya Maven nga adunay Overlay.

Pagsugod sa pag-apod-apod sa Camunda Tomcat

Ang laing kapilian mao ang pag-download lang sa pag-apod-apod sa Camunda Tomcat, unzip kini, ug padagana kini. Nagkinahanglan lamang kini sa Java Runtime Environment (JRE) nga na-install sa imong kompyuter. Kini mahimong sayon download gikan dinhi.

Paggamit sa Camunda alang sa dali nga orkestra base sa REST ug Workflow Engine (walay Java)

Aron mabag-o ang database o buhaton ang bisan unsa nga kinahanglan nimo nga i-configure ang Tomcat sama gihulagway sa dokumentasyon. Nahibal-an ko nga ang Tomcat mahimo’g paminawon nga komplikado, apan kini sa tinuud yano ra kaayo. Ug nahibal-an sa Google ang mga tubag sa tanan nga mahimo’g gikinahanglan sa proseso.

Pagdagan sa Camunda gamit ang Tomcat

Ang katapusan nga alternatibo mao ang pag-set up sa Tomcat sa imong kaugalingon ug i-install ang Camunda niini, pagsunod sa paghulagway sa pag-install. Magahatag kini kanimo ug higayon nga magamit ang bisan unsang bersyon sa Tomcat nga gusto nimo, o, pananglitan, i-install kini ingon usa ka serbisyo sa Windows.

Paglunsad sa Camunda ngadto sa produksyon

Kini sa kasagaran nagkinahanglan sa pipila ka katapusan nga setup sa pagpadagan sa Camunda. Adunay mga giya sa Camunda nga naghubit niini sa daghang detalye, apan dili nako kini hisgotan sa kini nga artikulo - Hinganlan ko ang usa ka pananglitan: ang REST API sa pag-apod-apod wala gi-configure alang sa pag-authenticate pinaagi sa default. Mahimo nimong usbon kini.

Pagsumada

Sama sa imong nakita, dali ra kaayo ang pagsugod sa Camunda, bisan unsa pa ang lengguwahe nga imong gigamit. Ang yawe nga punto mao nga ang tanan nga interaksyon gihimo pinaagi sa REST API. Ang pag-instalar dali ra usab, labi na kung gigamit ang Docker.

Source: www.habr.com

Idugang sa usa ka comment