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:
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.
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:
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:
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:
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).
Shunday qilib, avval siz bajarishingiz kerak fetchAndLock (chunki boshqa ishchilar tizimni kengaytirish uchun bir vaqtning o'zida vazifalarni olishlari mumkin):
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.
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.
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.
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.