Nggunakake Camunda kanggo orkestrasi gampang adhedhasar REST lan Workflow Engine (ora ana Java)

Hey Habr! Aku menehi perhatian marang terjemahan artikel kasebut "Gunakake Camunda minangka orkestrasi basis REST lan mesin alur kerja sing gampang digunakake (tanpa ndemek Jawa)" dening Bernd RΓΌcker.

07.07.2020/XNUMX/XNUMX, terjemahan artikel Bernd Rucker

Nggunakake Camunda kanggo orkestrasi gampang adhedhasar REST lan Workflow Engine (ora ana Java)

Aku kerep ngrembug arsitektur microservice karo wong non-Jawa: pangembang C#, pangembang Node.JS/JavaScript, utawa penggemar Golang. Kabeh mau ngadhepi kasunyatan sing mbutuhake mekanisme orkestrasi ing arsitektur microservice, utawa mung alat kanggo streamline alur kerja lan entuk kemampuan kanggo pesenan, nangani wektu entek, Saga lan transaksi ganti rugi.

platform BPM karo open source saka Camunda gedhe kanggo tugas kuwi. Ramah pangembang minangka salah sawijining fitur utama produk kasebut. Nanging yen sampeyan ndeleng dokumentasi, sampeyan bisa uga entuk kesan yen "keramahan" Camunda utamane ditujokake kanggo pangembang Jawa. Platform kasebut nyedhiyakake akeh pilihan kanggo nyambungake fungsi lan ekstensi sampeyan dhewe, nanging kabeh wis rampung ing Jawa. Apa tenan?

Ora! Nyatane, sampeyan bisa kanthi gampang mbukak Camunda tanpa kawruh Jawa lan nyiyapake arsitektur kanggo kode ing basa apa wae sing sampeyan pilih. Ing artikel iki, kita bakal nliti:

  • arsitektur dhasar;
  • REST API
  • saran babagan perpustakaan klien sing ana kanggo basa liyane saka Jawa;
  • conto nggunakake C # lan Node.JS;
  • cara kanggo miwiti server Camunda (Docker utawa Tomcat).

arsitektur

Camunda ditulis ing Jawa lan mbutuhake Java Virtual Machine (JVM) kanggo mbukak. Camunda nyedhiyakake API REST sing ngidini sampeyan nulis ing basa apa wae sing disenengi lan nggunakake REST karo Camunda:

Nggunakake Camunda kanggo orkestrasi gampang adhedhasar REST lan Workflow Engine (ora ana Java)

Alur kerja ing Camunda ditetepake ing BPMN, sing sejatine minangka file XML. Bisa dimodelake karo Modeler Camunda.

Mlaku Camunda liwat gambar Docker sing wis dibangun

Cara paling gampang kanggo mbukak Camunda yaiku nggunakake Docker. Cara alternatif kanggo miwiti Camunda diterangake mengko ing artikel iki.

Nggunakake Camunda kanggo orkestrasi gampang adhedhasar REST lan Workflow Engine (ora ana Java)

Ing kasus iki, mung mbukak:

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

Sampeyan ora perlu kuwatir babagan Linux, JVM utawa Tomcats. Dockerfiles lan dokumentasi dhasar (contone, instruksi kanggo nyambungake menyang database dibutuhake) kasedhiya ing GitHub.

Yen sampeyan pengin mbukak Camunda Enterprise Edition sampeyan bisa ngganti kanthi gampang file docker.

Nanging, mlaku Camunda karo Docker duwe kekurangan: sampeyan bakal entuk versi Tomcat sing ora mesthi kalebu perbaikan paling anyar. Kanggo ngatasi masalah iki, sampeyan bisa nggawe gambar Docker dhewe adhedhasar distribusi Tomcat sing dikarepake, kaya sing ditampilake ing conto iki, utawa gunakake salah sawijining solusi sing diterangake ing ngisor iki.

Panyebaran Model Proses

Ayo kang katon ing conto nggunakake Cithakan Saga kanggo pesenan trip klasik ngendi sampeyan pengin micu telung tumindak ing saurutan lan gracefully ijol kanggo tumindak kasil rampung ing cilik saka Gagal mengko. Diwakili ing wangun BPMN, katon kaya iki:

Nggunakake Camunda kanggo orkestrasi gampang adhedhasar REST lan Workflow Engine (ora ana Java)

Saiki sampeyan bisa nggunakake REST API kanggo penyebaran model proses. Contone, sampeyan nyimpen minangka trip.bpmn lan mbukak Camunda liwat Docker supaya kasedhiya ing 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

Saiki sampeyan bisa mlaku kedadean alur kerja anyar nggunakake REST API lan pass data sing pengin dideleng minangka variabel conto alur kerja:

  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

Pitakonan menarik sabanjure yaiku: kepiye cara nelpon Camunda kaya pesenan mobil? Camunda ora mung bisa nelpon layanan langsung (Push-Principle) nggunakake sawetara dibangun ing konektor, nanging uga sijine item karya ing jinis dibangun ing urutan. Buruh banjur bisa njupuk item karya liwat REST, nindakake karya, lan menehi Camunda kanggo ngrampungake (Pull-Principle).

Nggunakake Camunda kanggo orkestrasi gampang adhedhasar REST lan Workflow Engine (ora ana Java)

Dadi pisanan sampeyan kudu nglakokake fetchAndLock (amarga buruh liyane bisa nampa tugas ing wektu sing padha kanggo skala sistem):

  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

Banjur ngomong marang Camunda buruh rampung karya ( Elinga yen sampeyan kudu ngetik id tugas eksternal sing ditampa ing panjalukan pisanan):

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

Mekaten - sampeyan isih durung mbutuhake basa Jawa, ta? Lan iku cukup kanggo miwiti!

Pustaka Klien

Nelpon REST API gampang ing sembarang basa program. Ing JavaScript, iki gampang ditindakake nggunakake JQuery, lan ing C #, nggunakake System.Net.Http lan Newtonsoft.Json. Nanging iki bakal njupuk wektu. Dadi sampeyan mung bisa nggunakake sawetara perpustakaan klien.

Saiki, sawetara perpustakaan klien sing wis siap kasedhiya:

  • javascript: pranala. Didhukung dening Camunda;
  • Jawa: pranala. Didhukung dening Camunda;
  • C #:pranala ΠΈ pranala. Loro-lorone proyek kasebut ana ing negara penengah lan meh ora aktif, nanging bisa dadi titik wiwitan sing apik;
  • PHP: pranala - ora lengkap banget lan ora kalebu owah-owahan API paling anyar, nanging aku ngerti proyek sing nggunakake.

Kajaba JavaScript lan Jawa, perpustakaan klien ora dadi bagean saka produk Camunda dhewe. Aja ngarepake dheweke ndhukung kabeh fitur REST API Camunda. Mung amarga perpustakaan ora nyedhiyani fungsi tartamtu ora ateges iku ora ana, tansah mriksa Camunda REST API. Proyek referensi nggunakake perpustakaan minangka titik wiwitan lan cithakan.

Tuladha C#

Nggunakake perpustakaan klien ing ndhuwur, kita mung bisa nulis:

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

Kode sumber kanthi lengkap bisa ditemokake online: pranala. Conto liyane kasedhiya ing pranala.

Conto karo 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();

Informasi liyane bisa ditemokake ing situs web github.com

Cara Alternatif kanggo Bukak Camunda

Gambar Docker khusus kanthi "PERANG mandiri Camunda"

Minangka alternatif kanggo gambar Docker sing wis dibangun saka Camunda, sampeyan bisa nyiyapake Tomcat dhewe (contone, adhedhasar gambar Docker Tomcat resmi) banjur nyalin Camunda minangka salah sawijining file WAR sing diarani.

Nggunakake Camunda kanggo orkestrasi gampang adhedhasar REST lan Workflow Engine (ora ana Java)

Yen sampeyan duwe akeh syarat tambahan lan bisa nyetel lingkungan mbangun Jawa, sampeyan uga bisa nyiyapake perang Camunda Standalone. Nggawe mbangun Maven kaya ing conto iki: mbangun Maven karo konfigurasi perang utawa perakitan Maven karo Numpuki.

Miwiti distribusi Camunda Tomcat

Pilihan liyane yaiku ngundhuh distribusi Camunda Tomcat, unzip, lan mbukak. Iki mung mbutuhake Java Runtime Environment (JRE) diinstal ing komputer. Bisa gampang download saka kene.

Nggunakake Camunda kanggo orkestrasi gampang adhedhasar REST lan Workflow Engine (ora ana Java)

Kanggo ngganti database utawa nindakake tindakan liya sampeyan kudu ngatur Tomcat kaya diterangake ing dokumentasi. Aku ngerti Tomcat bisa muni rumit, nanging bener banget prasaja. Lan Google ngerti jawaban kanggo kabeh sing dibutuhake ing proses kasebut.

Mlaku Camunda nggunakake Tomcat

Alternatif pungkasan yaiku nyiyapake Tomcat dhewe lan nginstal Camunda, nderek katrangan instalasi. Iki bakal menehi pilihan kanggo nggunakake versi Tomcat sing disenengi, utawa nginstal minangka layanan Windows, contone.

Launching Camunda menyang produksi

Iki biasane mbutuhake sawetara persiyapan pungkasan kanggo mbukak Camunda. Ana pedoman ing Camunda sing njlèntrèhaké iki ing gedhe rinci, nanging aku ora bakal pindhah menyang ing artikel iki - Aku bakal mung siji conto: distribusi REST API ora diatur kanggo otentikasi minangka standar. Sampeyan bisa uga pengin ngganti iki.

Nyimpul

Nalika sampeyan bisa ndeleng, iku gampang banget kanggo miwiti karo Camunda, preduli saka basa sing digunakake. Intine yaiku kabeh interaksi ditindakake liwat REST API. Instalasi uga gampang banget, utamane nalika nggunakake Docker.

Source: www.habr.com

Add a comment