Menggunakan Camunda untuk orkestrasi berasaskan REST yang mudah dan Enjin Aliran Kerja (tiada Java)

Hello, Habr! Saya membentangkan kepada anda terjemahan artikel “Gunakan Camunda sebagai enjin orkestrasi dan aliran kerja berasaskan REST yang mudah digunakan (tanpa menyentuh Java)” oleh Bernd Rücker.

07.07.2020, terjemahan Perkara Bernd Rücker

Menggunakan Camunda untuk orkestrasi berasaskan REST yang mudah dan Enjin Aliran Kerja (tiada Java)

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:

Menggunakan Camunda untuk orkestrasi berasaskan REST yang mudah dan Enjin Aliran Kerja (tiada Java)

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.

Menggunakan Camunda untuk orkestrasi berasaskan REST yang mudah dan Enjin Aliran Kerja (tiada Java)

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:

Menggunakan Camunda untuk orkestrasi berasaskan REST yang mudah dan Enjin Aliran Kerja (tiada Java)

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:

  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

Sekarang anda boleh berlari contoh aliran kerja baharu menggunakan API REST dan menghantar data yang anda mahu lihat sebagai pembolehubah contoh aliran 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

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).

Menggunakan Camunda untuk orkestrasi berasaskan REST yang mudah dan Enjin Aliran Kerja (tiada Java)

Jadi pertama anda perlu lakukan fetchAndLock (memandangkan pekerja lain boleh menerima tugas pada masa yang sama untuk menskalakan 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

Kemudian beritahu Camunda itu pekerja telah menyelesaikan kerjanya (perhatikan bahawa anda mesti memasukkan ID tugas luaran yang diterima dalam permintaan pertama):

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

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:

  • JavaScript: pautan. Disokong oleh Camunda;
  • Java: pautan. Disokong oleh Camunda;
  • 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.

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

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.

Menggunakan Camunda untuk orkestrasi berasaskan REST yang mudah dan Enjin Aliran Kerja (tiada Java)

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.

Menggunakan Camunda untuk orkestrasi berasaskan REST yang mudah dan Enjin Aliran Kerja (tiada Java)

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.

Sumber: www.habr.com

Tambah komen