07.07.2020/XNUMX/XNUMX, tarjamahan tulisan Bernd Rucker
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:
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.
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:
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:
Ayeuna anjeun tiasa ngajalankeun instansi workflow anyar ngagunakeun REST API sareng lulus data anu anjeun hoyong tingali salaku variabel conto alur kerja:
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).
Janten mimitina anjeun kedah ngaéksekusi fetchAndLock (kusabab pagawé séjén tiasa nampi tugas dina waktos anu sami pikeun skala sistem):
É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:
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.
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.
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.
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.