Utilizà Camunda per una facile orchestrazione basatu in REST è Workflow Engine (senza Java)

Ehi Habr! Prestu à a vostra attenzione a traduzzione di l'articulu "Usate Camunda cum'è un mutore d'orchestrazione è di flussu di travagliu basatu in REST faciule d'utilizà (senza toccu Java)" di Bernd Rücker.

07.07.2020/XNUMX/XNUMX, traduzzione articuli Bernd Rucker

Utilizà Camunda per una facile orchestrazione basatu in REST è Workflow Engine (senza Java)

Spessu discute l'architettura di microservizi cù e persone chì ùn sò micca Java: sviluppatori C#, sviluppatori Node.JS/JavaScript, o aficionados Golang. Tutti sò affruntatu cù u fattu chì anu bisognu di un mecanismu d'orchestrazione in una architettura di microserviziu, o solu un strumentu per simplificà u flussu di travagliu è acquistà a capacità di ordine, manighjà timeouts, Saga è transazzione cumpensu.

piattaforma BPM cun open source da Camunda grande per tali compiti. L'amicizia di u sviluppatore hè una di e caratteristiche chjave di u pruduttu. Ma s'è guardate a so ducumentazione, pudete avè l'impressione chì a "amichevolezza" di Camunda hè principalmente destinata à i sviluppatori Java. A piattaforma furnisce assai opzioni per cunnette e vostre funzioni è estensioni, ma tuttu hè fattu in Java. Hè veramente?

Innò! In fatti, pudete facilmente eseguisce Camunda senza alcuna cunniscenza di Java è stabilisce l'architettura per u codice in ogni lingua di a vostra scelta. In questu articulu, guardemu:

  • architettura basica;
  • API REST
  • cunsiglii nantu à e biblioteche client esistenti per lingue diverse da Java;
  • esempiu cù C# è Node.JS;
  • modi per inizià u servitore Camunda (Docker o Tomcat).

architettura

Camunda hè scrittu in Java è hà bisognu di una Java Virtual Machine (JVM) per eseguisce. Camunda furnisce una API REST chì permette di scrive in ogni lingua chì ti piace è aduprà REST cù Camunda:

Utilizà Camunda per una facile orchestrazione basatu in REST è Workflow Engine (senza Java)

I flussi di travagliu in Camunda sò definiti in BPMN, chì hè basicamente un schedariu XML. Pò esse modellatu cù Camunda Modeler.

Eseguisce Camunda attraversu una maghjina Docker pre-custruita

U modu più faciule per eseguisce Camunda hè di utilizà Docker. Modi alternattivi per lancià Camunda sò descritti più tardi in questu articulu.

Utilizà Camunda per una facile orchestrazione basatu in REST è Workflow Engine (senza Java)

In questu casu, basta à eseguisce:

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

Ùn avete micca preoccupatu di Linux, JVMs o Tomcats. Dockerfiles è documentazione basica (per esempiu, struzzioni per cunnette à e basa di dati necessarii) sò dispunibili à Github.

Se vulete eseguisce Camunda Enterprise Edition, pudete facilmente cambià dockerfile.

Tuttavia, l'esecuzione di Camunda cù Docker hà un inconveniente: finisci cù una versione di Tomcat chì ùn include micca sempre l'ultime correzioni. Per travaglià intornu à questu, pudete creà a vostra propria maghjina Docker basatu nantu à a distribuzione Tomcat desiderata, cum'è mostra in questu esempiu, o utilizate una di e soluzioni descritte quì sottu.

Impiegazione di u mudellu di prucessu

Fighjemu un esempiu utilizendu u mudellu Saga per una riservazione di viaghju classica induve vulete attivà trè azzioni in una fila è cumpensà graziosamente l'azzioni cumpletu cù successu in casu di un fallimentu dopu. Rapprisintatu in forma BPMN, pare cusì:

Utilizà Camunda per una facile orchestrazione basatu in REST è Workflow Engine (senza Java)

Avà pudete aduprà API REST per a implementazione di mudelli di prucessu. Diciamu chì u salvate cum'è trip.bpmn è eseguite Camunda via Docker, cusì hè dispunibule nantu à 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

Avà pudete curriri novi istanze di flussu di travagliu usendu l'API REST è trasmette i dati chì vulete vede cum'è variabili di istanza di flussu di travagliu:

  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

A prossima quistione interessante hè: cumu si chjama Camunda prucedure cum'è a riservazione di una vittura? Camunda ùn pò micca solu chjamà i servizii immediatamente (Push-Principle) cù qualchì integratu connettori, ma ancu mette l'articuli di u travagliu in un tipu d'ordine integratu. U travagliadore pò allora piglià l'articuli di u travagliu via REST, eseguisce u travagliu, è dì à Camunda per compie (Pull-Principle).

Utilizà Camunda per una facile orchestrazione basatu in REST è Workflow Engine (senza Java)

Allora prima avete bisognu di eseguisce fetchAndLock (perchè altri travagliadori ponu riceve compiti à u stessu tempu per scala u 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

Allora dì à Camunda u travagliu hà finitu u travagliu (nota chì duvete inserisce l'id di u compitu esternu ricevutu in a prima dumanda):

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

Hè questu - ùn avete ancu bisognu di Java, nò? È basta à principià !

Biblioteche Clienti

Chjamà una API REST hè faciule in ogni lingua di prugrammazione. In JavaScript, questu hè convenientemente fattu cù JQuery, è in C#, cù System.Net.Http è Newtonsoft.Json. Ma questu duverà tempu. Cusì pudete solu aduprà una libreria cliente.

À u mumentu, parechje biblioteche di clientele pronte sò dispunibili:

  • javascript: ссылка. Supportatu da Camunda;
  • Java: ссылка. Supportatu da Camunda;
  • C #:ссылка и ссылка. I dui prughjetti sò in un statu intermediu è praticamenti dorme, ma ponu serve com'è un bonu puntu di partenza;
  • PHP: ссылка - micca troppu cumpletu è ùn include micca l'ultimi cambiamenti API, ma cunnoscu prughjetti chì l'utilizanu.

Cù l'eccezzioni di JavaScript è Java, e biblioteche di u cliente ùn sò micca parte di u pruduttu Camunda stessu. Ùn aspettate micca chì sustene tutte e funzioni di l'API REST di Camunda. Solu perchè una biblioteca ùn furnisce micca una certa funzione ùn significa micca chì ùn hè micca quì, verificate sempre l'API REST di Camunda. I prughjetti di riferimentu utilizanu biblioteche cum'è puntu di partenza è mudellu.

C# esempiu

Utilizendu a libreria di u cliente sopra, pudemu simpricimenti scrive:

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

U codice fonte cumplettamente funzionante pò esse truvatu in linea: ссылка. Un altru esempiu hè dispunibule à ссылка.

Esempiu cù 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();

Più infurmazione pò esse truvata nantu à u situ web github.com

Modi alternativi per lancià Camunda

Immagine Docker persunalizata cù "Camunda standalone WAR"

Cum'è una alternativa à una maghjina Docker pre-custruita da Camunda, pudete preparà Tomcat stessu (per esempiu, basatu annantu à l'imaghjini ufficiali di Docker Tomcat) è poi copià Camunda in questu cum'è unu di i chjamati schedarii WAR.

Utilizà Camunda per una facile orchestrazione basatu in REST è Workflow Engine (senza Java)

Sì avete parechje esigenze supplementari è pudete stabilisce un ambiente di creazione Java, pudete ancu stabilisce a guerra Camunda Standalone. Configurate un Maven build cum'è in questi esempi: build Maven cù a cunfigurazione di guerra o assemblea Maven cù Overlay.

Cumincià a distribuzione Camunda Tomcat

Un'altra opzione hè di scaricà simpricimenti a distribuzione Camunda Tomcat, unzip it, and run it. Questu hè solu bisognu di u Java Runtime Environment (JRE) installatu in u vostru urdinatore. Pò esse facilmente scaricate da quì.

Utilizà Camunda per una facile orchestrazione basatu in REST è Workflow Engine (senza Java)

Per cambià a basa di dati o fà qualsiasi altra cosa avete bisognu di cunfigurà Tomcat like descrittu in a documentazione. Sapemu chì Tomcat pò sembra complicatu, ma in realtà hè assai simplice. E Google cunnosce e risposte à tuttu ciò chì pò esse dumandatu in u prucessu.

Esecuzione di Camunda cù Tomcat

L'ultima alternativa hè di cunfigurà Tomcat sè stessu è stallà Camunda in questu, seguitu a descrizzione di l'installazione. Questu vi darà l'opzione di utilizà a versione di Tomcat chì preferite, o stallà cum'è un serviziu Windows, per esempiu.

Lanciamentu di Camunda in pruduzzione

Questu generalmente richiederà una certa configurazione finale per eseguisce Camunda. Ci sò linee guida in Camunda chì descrizanu questu in grande detail, ma ùn entreraghju micca in questu articulu - nome solu un esempiu: l'API REST di a distribuzione ùn hè micca cunfigurata per l'autentificazione per difettu. Pudete vulete cambià questu.

Riunione

Comu pudete vede, hè assai faciule di principià cù Camunda, indipendentemente da a lingua chì avete aduprà. U puntu chjave hè chì tutta l'interazzione hè fatta attraversu l'API REST. L'installazione hè ancu abbastanza faciule, soprattuttu quandu si usa Docker.

Source: www.habr.com

Add a comment