REST va Workflow Engine asosida oson orkestratsiya qilish uchun Camunda-dan foydalanish (Java yo'q)

Hey Xabr! E'tiboringizga maqolaning tarjimasini taqdim etaman "Camunda-dan foydalanish uchun qulay REST-ga asoslangan orkestratsiya va ish jarayoni mexanizmi sifatida foydalaning (Java-ga tegmasdan)" Bernd Ryuker tomonidan.

07.07.2020, tarjima maqolalar Bernd Ruker

REST va Workflow Engine asosida oson orkestratsiya qilish uchun Camunda-dan foydalanish (Java yo'q)

Men mikroservis arxitekturasini Java bo'lmagan odamlar bilan tez-tez muhokama qilaman: C# dasturchilari, Node.JS/JavaScript dasturchilari yoki Golang ishqibozlari. Ularning barchasi mikroservis arxitekturasida orkestratsiya mexanizmiga yoki shunchaki ish jarayonini tartibga solish va buyurtma berish, taym-autlarni, Saga va kompensatsiya tranzaktsiyalarini boshqarish qobiliyatiga ega bo'lish vositasiga muhtojligi bilan duch kelishadi.

BPM platformasi bilan Camunda'dan ochiq manba bunday vazifalar uchun juda yaxshi. Ishlab chiquvchilarga qulaylik mahsulotning asosiy xususiyatlaridan biridir. Ammo uning hujjatlarini ko'rib chiqsangiz, Camundaning "do'stligi" asosan Java dasturchilariga qaratilgan degan taassurot paydo bo'lishi mumkin. Platforma o'z funksiyalaringiz va kengaytmalaringizni ulash uchun juda ko'p imkoniyatlarni taqdim etadi, ammo barchasi Java-da amalga oshiriladi. Haqiqatan ham shundaymi?

Yo'q! Aslida, siz hech qanday Java bilimisiz Camunda-ni osongina ishga tushirishingiz va o'zingiz tanlagan istalgan tilda kod arxitekturasini sozlashingiz mumkin. Ushbu maqolada biz quyidagilarni ko'rib chiqamiz:

  • asosiy arxitektura;
  • REST API
  • Java-dan boshqa tillar uchun mavjud mijozlar kutubxonalari bo'yicha maslahat;
  • misol C# va Node.JS yordamida;
  • Camunda serverini ishga tushirish usullari (Docker yoki Tomcat).

arxitektura

Camunda Java tilida yozilgan va ishlashi uchun Java Virtual Machine (JVM) kerak. Camunda sizga yoqqan tilda yozish va Camunda bilan REST dan foydalanish imkonini beruvchi REST API taqdim etadi:

REST va Workflow Engine asosida oson orkestratsiya qilish uchun Camunda-dan foydalanish (Java yo'q)

Camunda-dagi ish oqimlari BPMN-da aniqlanadi, bu asosan XML fayli. U bilan modellashtirish mumkin Camunda Modeler.

Oldindan yaratilgan Docker tasviri orqali Camunda-ni ishga tushirish

Camunda-ni ishga tushirishning eng oson yo'li Docker-dan foydalanishdir. Camunda-ni ishga tushirishning muqobil usullari ushbu maqolada keyinroq tasvirlangan.

REST va Workflow Engine asosida oson orkestratsiya qilish uchun Camunda-dan foydalanish (Java yo'q)

Bunday holda, oddiygina bajaring:

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

Linux, JVM yoki Tomcats haqida tashvishlanishingiz shart emas. Docker fayllari va asosiy hujjatlar (masalan, kerakli ma'lumotlar bazalariga ulanish bo'yicha ko'rsatmalar) quyidagi manzilda mavjud Github.

Agar siz Camunda Enterprise Edition-ni ishga tushirishni istasangiz, osongina o'zgartirishingiz mumkin Docker fayli.

Biroq, Camunda-ning Docker-da ishlashi bitta kamchilikka ega: siz Tomcat-ning har doim ham so'nggi tuzatishlarni o'z ichiga olmaydigan versiyasiga ega bo'lasiz. Buni hal qilish uchun siz ushbu misolda ko'rsatilganidek, kerakli Tomcat taqsimotiga asoslangan holda o'zingizning Docker tasviringizni yaratishingiz yoki quyida tavsiflangan echimlardan birini ishlatishingiz mumkin.

Modelni joylashtirish jarayoni

Klassik sayohatni bron qilish uchun Saga shablonidan foydalangan holda misolni ko'rib chiqaylik, unda siz ketma-ket uchta amalni ishga tushirishni va keyinchalik muvaffaqiyatsizlikka uchragan taqdirda muvaffaqiyatli bajarilgan harakatlarni chiroyli tarzda qoplashni xohlaysiz. BPMN shaklida ifodalangan, u quyidagicha ko'rinadi:

REST va Workflow Engine asosida oson orkestratsiya qilish uchun Camunda-dan foydalanish (Java yo'q)

Endi siz foydalanishingiz mumkin Jarayon modelini joylashtirish uchun REST API. Aytaylik, siz uni trip.bpmn sifatida saqladingiz va Docker orqali Camunda dasturini ishga tushirdingiz, shunda u localhost:8080 da mavjud:

  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

Endi siz yugurishingiz mumkin yangi ish oqimi misollari REST API yordamida va ish oqimi misoli oΚ»zgaruvchilari sifatida koΚ»rmoqchi boΚ»lgan maΚΌlumotlarni uzating:

  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

Keyingi qiziqarli savol: Camunda qanday qilib mashinani bron qilish kabi protseduralarni chaqiradi? Camunda nafaqat ba'zi o'rnatilgan o'rnatilgan xizmatlardan foydalangan holda darhol xizmatlarga qo'ng'iroq qila olmaydi (Push-Principle). ulagichlar, balki ish elementlarini o'rnatilgan tartibda ham qo'ying. Keyin ishchi REST orqali ish elementlarini olib kelishi, ishni bajarishi va Camundaga bajarishini aytishi mumkin (Pull-Principle).

REST va Workflow Engine asosida oson orkestratsiya qilish uchun Camunda-dan foydalanish (Java yo'q)

Shunday qilib, avval siz bajarishingiz kerak fetchAndLock (chunki boshqa ishchilar tizimni kengaytirish uchun bir vaqtning o'zida vazifalarni olishlari mumkin):

  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

Keyin Camundaga ayting ishchi ishni tugatdi (birinchi so'rovda olingan tashqi vazifa identifikatorini kiritishingiz kerakligini unutmang):

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

Hammasi - sizga hali Java kerak emas, to'g'rimi? Va bu boshlash uchun etarli!

Mijoz kutubxonalari

REST API-ni chaqirish har qanday dasturlash tilida oson. JavaScript-da bu JQuery yordamida, C# da System.Net.Http va Newtonsoft.Json yordamida qulay tarzda amalga oshiriladi. Lekin bu vaqt talab etadi. Shunday qilib, siz faqat ba'zi mijozlar kutubxonasidan foydalanishingiz mumkin.

Hozirgi vaqtda bir nechta tayyor mijozlar kutubxonalari mavjud:

  • javascript: aloqa. Camunda tomonidan qo'llab-quvvatlanadi;
  • Java: aloqa. Camunda tomonidan qo'llab-quvvatlanadi;
  • C #:aloqa ΠΈ aloqa. Bu ikkala loyiha ham oraliq holatda va amalda harakatsiz, lekin yaxshi boshlanish nuqtasi boΚ»lib xizmat qilishi mumkin;
  • PHP: aloqa - unchalik to'liq emas va eng so'nggi API o'zgarishlarini o'z ichiga olmaydi, lekin men uni ishlatadigan loyihalarni bilaman.

JavaScript va Java-dan tashqari, mijoz kutubxonalari Camunda mahsulotining bir qismi emas. Ular Camunda-ning REST API-ning barcha xususiyatlarini qo'llab-quvvatlashini kutmang. Kutubxona ma'lum bir funktsiyani ta'minlamasligi uning mavjud emasligini anglatmaydi, har doim Camunda REST API-ni tekshiring. Malumot loyihalari boshlang'ich nuqta va shablon sifatida kutubxonalardan foydalanadi.

C# misol

Yuqoridagi mijozlar kutubxonasidan foydalanib, biz shunchaki yozishimiz mumkin:

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

To'liq ishlaydigan manba kodini Internetda topish mumkin: aloqa. Boshqa misolda mavjud aloqa.

Node.js bilan misol

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

Batafsil ma'lumotni veb-saytda topishingiz mumkin github.com

Camundani ishga tushirishning muqobil usullari

"Camunda mustaqil WAR" bilan maxsus Docker tasviri

Camunda-dan oldindan qurilgan Docker tasviriga muqobil sifatida siz Tomcat-ni o'zingiz tayyorlashingiz mumkin (masalan, rasmiy Docker Tomcat tasvirlari asosida) va keyin Camunda-ni WAR deb ataladigan fayllardan biri sifatida nusxalashingiz mumkin.

REST va Workflow Engine asosida oson orkestratsiya qilish uchun Camunda-dan foydalanish (Java yo'q)

Agar sizda ko'plab qo'shimcha talablar mavjud bo'lsa va Java qurish muhitini o'rnatishingiz mumkin bo'lsa, Camunda Standalone urushini ham o'rnatishingiz mumkin. Ushbu misollardagi kabi Maven qurilishini o'rnating: build Maven urush konfiguratsiyasi bilan yoki yig'ish Overlay bilan Maven.

Camunda Tomcat distributivini ishga tushirish

Yana bir variant - oddiygina Camunda Tomcat distributivini yuklab olish, uni ochish va ishga tushirish. Buning uchun faqat kompyuteringizda Java Runtime Environment (JRE) o'rnatilgan bo'lishi kerak. Bu oson bo'lishi mumkin bu yerdan yuklab oling.

REST va Workflow Engine asosida oson orkestratsiya qilish uchun Camunda-dan foydalanish (Java yo'q)

Ma'lumotlar bazasini o'zgartirish yoki boshqa biror narsa qilish uchun siz Tomcat-ni sozlashingiz kerak hujjatlarda tasvirlangan. Bilaman, Tomcat murakkab tuyulishi mumkin, lekin bu juda oddiy. Va Google bu jarayonda talab qilinishi mumkin bo'lgan barcha savollarga javoblarni biladi.

Tomcat yordamida Camunda-ni ishga tushirish

Oxirgi muqobil Tomcat-ni o'zingiz sozlashingiz va unga Camunda-ni o'rnatishingiz, o'rnatish tavsifidan keyin. Bu sizga Tomcat-ning qaysi versiyasini afzal ko'rsangiz foydalanish yoki uni Windows xizmati sifatida o'rnatish imkoniyatini beradi.

Camunda ishlab chiqarishga kirish

Bu odatda Camundani ishga tushirish uchun yakuniy sozlashni talab qiladi. Camunda'da buni batafsil tavsiflovchi ko'rsatmalar mavjud, ammo men ushbu maqolada ularga kirmayman - men faqat bitta misol keltiraman: tarqatishning REST API sukut bo'yicha autentifikatsiya qilish uchun sozlanmagan. Buni o'zgartirishni xohlashingiz mumkin.

Xulosa

Ko'rib turganingizdek, qaysi tildan foydalansangiz ham, Camunda bilan ishlashni boshlash juda oson. Asosiy nuqta shundaki, barcha o'zaro ta'sirlar REST API orqali amalga oshiriladi. O'rnatish ham juda oson, ayniqsa Docker-dan foydalanganda.

Manba: www.habr.com

a Izoh qo'shish