Saya sering membincangkan seni bina perkhidmatan mikro dengan orang bukan Java: C#, pembangun Node.JS/JavaScript atau peminat Golang. Kesemua mereka berhadapan dengan hakikat bahawa mereka memerlukan enjin orkestrasi dalam seni bina perkhidmatan mikro atau sekadar alat untuk menyelaraskan aliran kerja dan memperoleh keupayaan untuk memesan, mengendalikan tamat masa, Saga dan transaksi pampasan.
platform BPM dengan sumber terbuka daripada Camunda bagus untuk tugasan sebegitu. Kemesraan pembangun adalah salah satu ciri utama produk. Tetapi jika anda melihat dokumentasinya, anda mungkin mendapat tanggapan bahawa kemesraan Camunda ditujukan terutamanya kepada pembangun Java. Platform ini menyediakan banyak peluang untuk menyambungkan fungsi dan sambungan anda sendiri, tetapi semuanya dilakukan dalam Java. Betul ke?
Tidak! Malah, anda boleh menjalankan Camunda dengan mudah tanpa sebarang pengetahuan Java dan mengkonfigurasi seni bina untuk mengekod dalam mana-mana bahasa pilihan anda. Dalam artikel ini kita akan melihat:
seni bina asas;
API REST;
nasihat mengenai perpustakaan pelanggan sedia ada untuk bahasa selain Java;
contoh penggunaan C# dan Node.JS;
cara untuk menjalankan pelayan Camunda (Docker atau Tomcat).
seni bina
Camunda ditulis dalam Java dan memerlukan Mesin Maya Java (JVM) untuk dijalankan. Camunda menyediakan API REST yang membolehkan anda menulis dalam mana-mana bahasa yang anda suka dan menggunakan REST dengan Camunda:
Aliran kerja dalam Camunda ditakrifkan dalam BPMN, yang pada asasnya ialah fail XML. Ia boleh dimodelkan menggunakan Pemodel Camunda.
Menjalankan Camunda melalui imej Docker pra-bina
Cara paling mudah untuk menjalankan Camunda ialah menggunakan Docker. Cara alternatif untuk menjalankan Camunda diterangkan kemudian dalam artikel ini.
Dalam kes ini, jalankan sahaja:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Anda tidak perlu risau tentang Linux, Java Virtual Machines atau Tomcats. Fail Docker dan dokumentasi asas (contohnya, arahan untuk menyambung ke pangkalan data yang diperlukan) tersedia di Github.
Jika anda ingin menjalankan Camunda Enterprise Edition, anda boleh menukar dengan mudah Dockerfile.
Walau bagaimanapun, terdapat satu kelemahan untuk menjalankan Camunda menggunakan Docker: anda akan mendapat versi Tomcat yang tidak selalu menyertakan pembetulan terkini. Untuk mengatasinya, anda boleh membuat sendiri imej Docker berdasarkan pengedaran Tomcat yang diingini, seperti yang ditunjukkan dalam contoh ini, atau gunakan salah satu penyelesaian yang diterangkan di bawah.
Menggunakan Model Proses
Mari lihat contoh menggunakan templat Saga untuk tempahan perjalanan klasik di mana anda ingin mencetuskan tiga tindakan berturut-turut dan mengimbangi tindakan yang berjaya sekiranya berlaku kegagalan kemudian. Dibentangkan dalam bentuk BPMN, ia kelihatan seperti ini:
Kini anda boleh menggunakan REST API untuk penggunaan model proses. Katakan anda menyimpannya sebagai trip.bpmn dan menjalankan Camunda melalui Docker supaya ia tersedia di localhost:8080:
Sekarang anda boleh berlari contoh aliran kerja baharu menggunakan API REST dan menghantar data yang anda mahu lihat sebagai pembolehubah contoh aliran kerja:
Soalan menarik seterusnya ialah bagaimana Camunda mencetuskan prosedur seperti menempah kereta? Camunda bukan sahaja boleh memanggil perkhidmatan dengan segera (Prinsip Tekan), menggunakan beberapa terbina dalam penyambung, tetapi juga meletakkan item kerja ke dalam sejenis baris gilir terbina dalam. Pekerja kemudiannya boleh menerima item kerja melalui REST, melaksanakan kerja dan melaporkan penyiapan kepada Camunda (Prinsip Tarik).
Jadi pertama anda perlu lakukan fetchAndLock (memandangkan pekerja lain boleh menerima tugas pada masa yang sama untuk menskalakan sistem):
Kemudian beritahu Camunda itu pekerja telah menyelesaikan kerjanya (perhatikan bahawa anda mesti memasukkan ID tugas luaran yang diterima dalam permintaan pertama):
Itu sahaja - anda tidak memerlukan Java setakat ini, bukan? Dan itu sudah cukup untuk bermula!
Perpustakaan Pelanggan
Memanggil REST API adalah mudah dalam mana-mana bahasa pengaturcaraan. Dalam JavaScript adalah mudah untuk melakukan ini menggunakan JQuery, dan dalam C# anda boleh menggunakan System.Net.Http dan Newtonsoft.Json. Tetapi ini akan mengambil masa. Jadi anda hanya boleh menggunakan beberapa perpustakaan pelanggan.
Pada masa ini terdapat beberapa perpustakaan pelanggan siap sedia tersedia:
C #:pautan и pautan. Kedua-dua projek ini berada dalam keadaan pertengahan dan hampir tidak mempunyai aktiviti, tetapi boleh berfungsi sebagai titik permulaan yang baik;
PHP: pautan bukanlah perpustakaan yang sangat lengkap dan tidak termasuk perubahan API terkini, tetapi saya tahu projek yang menggunakannya.
Dengan pengecualian JavaScript dan Java, perpustakaan pelanggan bukan sebahagian daripada produk Camunda itu sendiri. Jangan harap mereka menyokong semua ciri API REST Camunda. Hanya kerana pustaka tidak menyediakan ciri tertentu tidak bermakna ia tiada, sentiasa semak API Camunda REST. Projek biasa menggunakan perpustakaan sebagai titik permulaan dan templat.
Contoh dengan C#
Menggunakan perpustakaan pelanggan di atas, kita hanya boleh menulis:
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", "..." }
});
Kod sumber berfungsi penuh boleh didapati dalam talian: pautan. Contoh lain boleh didapati di pautan.
Maklumat lanjut boleh didapati di laman web Github.com
Cara alternatif untuk memulakan Camunda
Imej Docker tersuai dengan "PERANG kendiri Camunda"
Sebagai alternatif kepada imej Docker pra-bina daripada Camunda, anda boleh menyediakan Tomcat sendiri (contohnya, berdasarkan imej rasmi Docker Tomcat) dan kemudian menyalin Camunda ke dalamnya sebagai salah satu daripada apa yang dipanggil fail WAR.
Jika anda mempunyai banyak keperluan tambahan dan boleh menyesuaikan persekitaran binaan Java, anda juga boleh mengkonfigurasi perang Camunda Standalone. Sediakan binaan Maven seperti dalam contoh ini: bina Maven dengan konfigurasi perang atau perhimpunan Maven dengan Tindanan.
Melancarkan pengedaran Camunda Tomcat
Pilihan lain ialah dengan hanya memuat turun pengedaran Camunda Tomcat, nyahzipnya dan jalankannya. Untuk melakukan ini, anda hanya memerlukan Java Runtime Environment (JRE) dipasang pada komputer anda. Ia boleh dengan mudah muat turun dari sini.
Untuk menukar pangkalan data atau melakukan apa sahaja yang anda perlukan untuk mengkonfigurasi Tomcat seperti diterangkan dalam dokumentasi. Saya tahu Tomcat mungkin kelihatan rumit, tetapi ia sebenarnya sangat mudah. Dan Google mempunyai jawapan kepada semua yang anda perlukan dalam proses itu.
Menjalankan Camunda menggunakan Tomcat
Alternatif terakhir ialah mengkonfigurasi Tomcat sendiri dan memasang Camunda di dalamnya, mengikuti penerangan pemasangan. Ini akan memberi anda peluang untuk menggunakan mana-mana versi Tomcat yang anda suka, atau, sebagai contoh, memasangnya sebagai perkhidmatan Windows.
Pelancaran Camunda ke dalam pengeluaran
Biasanya, ini memerlukan anda melakukan beberapa persediaan akhir untuk menjalankan Camunda. Camunda mempunyai garis panduan yang menerangkan perkara ini dengan terperinci, tetapi saya tidak akan menyentuhnya dalam artikel ini - Saya hanya akan memberikan satu contoh: API REST pengedaran tidak dikonfigurasikan untuk pengesahan secara lalai. Anda mungkin mahu menukar ini.
Merumuskan
Seperti yang anda mungkin perasan, bermula dengan Camunda adalah sangat mudah, tanpa mengira bahasa yang anda gunakan. Perkara utama ialah semua komunikasi dilakukan melalui API REST. Pemasangan juga agak mudah, terutamanya apabila menggunakan Docker.