Ngagunakeun Camunda pikeun orkestrasi gampang dumasar kana REST sareng Workflow Engine (henteu aya Java)

Héy Habr! Kuring nampilkeun ka perhatian anjeun tarjamahan artikel "Paké Camunda salaku orkestrasi basis REST anu gampang dianggo sareng mesin alur kerja (tanpa ngarampa Java)" ku Bernd Rücker.

07.07.2020/XNUMX/XNUMX, tarjamahan tulisan Bernd Rucker

Ngagunakeun Camunda pikeun orkestrasi gampang dumasar kana REST sareng Workflow Engine (henteu aya Java)

Kuring mindeng ngabahas arsitektur microservice jeung urang non-Jawa: C# pamekar, Node.JS/JavaScript pamekar, atawa aficionados Golang. Sakabéh éta Nyanghareupan kanyataan yén maranéhna butuh hiji mékanisme orkestrasi dina arsitéktur microservice, atawa ngan alat pikeun streamline workflow jeung mangtaun kamampuhan pikeun mesen, nanganan timeouts, Saga jeung transaksi compensating.

platform BPM kalawan open source ti Camunda gede pikeun tugas saperti. Ramah pamekar mangrupikeun salah sahiji fitur konci produk. Tapi upami anjeun ningali dokuméntasina, anjeun tiasa nampi kesan yén "karamahan" Camunda utamina ditujukeun pikeun pamekar Java. Platformna nyayogikeun seueur pilihan pikeun nyambungkeun fungsi sareng ekstensi anjeun nyalira, tapi sadayana dilakukeun dina Java. Bener kitu?

Henteu! Kanyataanna, anjeun bisa kalayan gampang ngajalankeun Camunda tanpa pangaweruh Java tur nyetel arsitéktur pikeun kode dina sagala basa pilihan Anjeun. Dina artikel ieu, urang bakal kasampak di:

  • arsitéktur dasar;
  • REST API
  • naséhat ngeunaan perpustakaan klien aya pikeun basa lian ti Java;
  • conto ngagunakeun C # jeung Node.JS;
  • cara pikeun ngamimitian server Camunda (Docker atanapi Tomcat).

gawena undagi

Camunda ditulis dina Java sareng peryogi Java Virtual Machine (JVM) pikeun ngajalankeun. Camunda nyayogikeun API REST anu ngamungkinkeun anjeun nyerat dina basa naon waé anu anjeun pikahoyong sareng nganggo REST sareng Camunda:

Ngagunakeun Camunda pikeun orkestrasi gampang dumasar kana REST sareng Workflow Engine (henteu aya Java)

Workflows di Camunda dihartikeun dina BPMN, nu dasarna mangrupa file XML. Éta tiasa dimodelkeun sareng Modeler Camunda.

Ngajalankeun Camunda ngaliwatan gambar Docker anu tos diwangun

Cara panggampangna pikeun ngajalankeun Camunda nyaéta ngagunakeun Docker. Cara alternatif pikeun ngajalankeun Camunda dijelaskeun engké dina tulisan ieu.

Ngagunakeun Camunda pikeun orkestrasi gampang dumasar kana REST sareng Workflow Engine (henteu aya Java)

Dina hal ieu, ngan ngajalankeun:

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

Anjeun teu kedah hariwang ngeunaan Linux, JVM atanapi Tomcats. Dockerfiles jeung dokuméntasi dasar (Contona, parentah pikeun nyambungkeun kana database diperlukeun) sadia di Github.

Upami anjeun hoyong ngajalankeun Camunda Enterprise Edition anjeun tiasa kalayan gampang robih dockerfile.

Nanging, ngajalankeun Camunda sareng Docker ngagaduhan hiji kalemahan: anjeun bakal nampi vérsi Tomcat anu henteu salawasna kalebet perbaikan pangénggalna. Jang ngalampahkeun ieu, anjeun tiasa nyiptakeun gambar Docker anjeun sorangan dumasar kana distribusi Tomcat anu dipikahoyong, sapertos anu dipidangkeun dina conto ieu, atanapi nganggo salah sahiji solusi anu dijelaskeun di handap ieu.

Prosés Modél deployment

Hayu urang tingali conto nganggo template Saga pikeun pesenan perjalanan klasik dimana anjeun badé micu tilu tindakan sakaligus sareng anggun ngimbangan tindakan anu suksés upami aya kagagalan engké. Diwakilan dina wangun BPMN, sigana kieu:

Ngagunakeun Camunda pikeun orkestrasi gampang dumasar kana REST sareng Workflow Engine (henteu aya Java)

Ayeuna anjeun tiasa nganggo REST API pikeun deployment modél prosés. Anggap anjeun simpen salaku trip.bpmn sareng ngajalankeun Camunda via Docker supados sayogi dina 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

Ayeuna anjeun tiasa ngajalankeun instansi workflow anyar ngagunakeun REST API sareng lulus data anu anjeun hoyong tingali salaku 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

Patarosan metot salajengna nyaeta: kumaha carana nelepon prosedur Camunda kawas booking mobil? Camunda teu ngan bisa nelepon jasa langsung (Push-Prinsip) ngagunakeun sababaraha diwangun-di panyambungna, tapi ogé nempatkeun barang gawé dina jenis diwangun-dina urutan. Pagawe teras tiasa nyandak barang padamelan ngalangkungan REST, ngalaksanakeun padamelan, sareng nyarioskeun Camunda pikeun ngalengkepan (Prinsip Tarik).

Ngagunakeun Camunda pikeun orkestrasi gampang dumasar kana REST sareng Workflow Engine (henteu aya Java)

Janten mimitina anjeun kedah ngaéksekusi fetchAndLock (kusabab pagawé séjén tiasa nampi tugas dina waktos anu sami pikeun 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

Lajeng ngabejaan Camunda éta pagawe réngsé gawé (Catetan yén anjeun kedah ngalebetkeun id tugas éksternal anu ditampi dina pamundut anu munggaran):

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

Éta éta - anjeun masih henteu peryogi Java, sanés? Sareng éta cekap pikeun ngamimitian!

Perpustakaan klien

Nyauran REST API gampang dina basa program naon waé. Dina JavaScript, ieu merenah dipigawé maké JQuery, sarta dina C #, ngagunakeun System.Net.Http na Newtonsoft.Json. Tapi ieu bakal butuh waktu. Janten anjeun tiasa nganggo sababaraha perpustakaan klien.

Ayeuna, sababaraha perpustakaan klien siap-siap sayogi:

  • javascript: link. Dirojong ku Camunda;
  • Jawa: link. Dirojong ku Camunda;
  • C #:link и link. Duanana proyék ieu dina kaayaan panengah sarta praktis dormant, tapi bisa ngawula ka salaku titik awal alus;
  • PHP: link - teu teuing lengkep jeung teu kaasup parobahan API panganyarna, tapi kuring nyaho proyék nu make eta.

Iwal JavaScript jeung Java, perpustakaan klien teu bagian tina produk Camunda sorangan. Tong ngarepkeun aranjeunna ngadukung sadaya fitur REST API Camunda. Ngan kusabab perpustakaan teu nyadiakeun fungsi nu tangtu teu hartosna teu aya, salawasna pariksa API sésana Camunda urang. Proyék rujukan ngagunakeun perpustakaan salaku titik awal sareng citakan.

C# conto

Ngagunakeun perpustakaan klien di luhur, urang ngan saukur 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", "..." }
    });

Kodeu sumber anu lengkep tiasa dipendakan online: link. conto sejen sadia di link.

Contona jeung 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();

Inpormasi lengkep tiasa dipendakan dina halaman wéb github.com

Cara Alternatif pikeun Ngajalankeun Camunda

Gambar Docker khusus sareng "PERANG mandiri Camunda"

Minangka alternatif pikeun gambar Docker anu tos diwangun ti Camunda, anjeun tiasa nyiapkeun Tomcat sorangan (contona, dumasar kana gambar Docker Tomcat resmi) teras nyalin Camunda kana éta salaku salah sahiji anu disebut file WAR.

Ngagunakeun Camunda pikeun orkestrasi gampang dumasar kana REST sareng Workflow Engine (henteu aya Java)

Upami Anjeun gaduh loba sarat tambahan sarta bisa nyetél lingkungan ngawangun Java, Anjeun ogé tiasa nyetél perang Camunda Mandiri. Nyetél ngawangun Maven sapertos dina conto ieu: ngawangun Maven kalawan config perang atawa assembly Maven kalawan Overlay.

Ngamimitian distribusi Camunda Tomcat

Pilihan anu sanés nyaéta ngan ukur unduh distribusi Camunda Tomcat, unzip, teras jalankeun. Ieu ngan merlukeun Java Runtime Environment (JRE) dipasang dina komputer Anjeun. Éta tiasa gampang ngundeur ti dieu.

Ngagunakeun Camunda pikeun orkestrasi gampang dumasar kana REST sareng Workflow Engine (henteu aya Java)

Dina raraga ngarobah database atawa ngalakukeun nanaon sejenna maneh kudu ngonpigurasikeun Tomcat kawas dijelaskeun dina dokuméntasi. Kuring terang Tomcat sigana pajeulit, tapi éta saderhana pisan. Sareng Google terang jawaban kana sadaya anu diperyogikeun dina prosésna.

Ngajalankeun Camunda maké Tomcat

Alternatif terakhir nyaéta nyetél Tomcat sorangan sareng pasang Camunda kana éta, nuturkeun katerangan instalasi. Ieu bakal masihan anjeun pilihan pikeun nganggo versi mana waé tina Tomcat anu anjeun pikahoyong, atanapi pasang salaku jasa Windows, contona.

Ngaluncurkeun Camunda kana produksi

Ieu biasana ngabutuhkeun sababaraha setélan ahir pikeun ngajalankeun Camunda. Aya tungtunan di Camunda nu ngajelaskeun ieu di jéntré hébat, tapi kuring moal balik kana aranjeunna dina artikel ieu - Kuring ngan bakal ngaranan hiji conto: sebaran urang REST API teu ngonpigurasi pikeun auténtikasi sacara standar. Anjeun meureun hoyong ngarobah ieu.

summing up

Sakumaha anjeun tiasa tingali, éta gampang pisan pikeun ngamimitian nganggo Camunda, henteu paduli basa anu anjeun anggo. Titik konci nyaéta yén sadaya interaksi dilakukeun ngaliwatan REST API. Pamasangan ogé gampang pisan, khususna nalika nganggo Docker.

sumber: www.habr.com

Tambahkeun komentar