REST və İş axını Mühərrikinə əsaslanan asan orkestr üçün Camundadan istifadə (Java yoxdur)

Hey Habr! Məqalənin tərcüməsini diqqətinizə təqdim edirəm "Camunda-dan istifadəsi asan REST əsaslı orkestrləşdirmə və iş axını mühərriki kimi istifadə edin (Java-ya toxunmadan)" Bernd Rücker tərəfindən.

07.07.2020/XNUMX/XNUMX, tərcümə Məqalə Bernd Ruker

REST və İş axını Mühərrikinə əsaslanan asan orkestr üçün Camundadan istifadə (Java yoxdur)

Mən tez-tez Java olmayan insanlarla mikroservis arxitekturasını müzakirə edirəm: C# tərtibatçıları, Node.JS/JavaScript tərtibatçıları və ya Golang həvəskarları. Onların hamısı mikroservis arxitekturasında orkestrləşdirmə mexanizminə və ya sadəcə iş prosesini tənzimləmək və sifariş vermək, fasilələri, Saga və kompensasiya əməliyyatlarını idarə etmək bacarığı əldə etmək üçün bir vasitəyə ehtiyac duyduqları faktı ilə üzləşirlər.

BPM platforması ilə Camunda-dan açıq mənbə belə tapşırıqlar üçün əladır. Tərtibatçıya uyğunluq məhsulun əsas xüsusiyyətlərindən biridir. Ancaq onun sənədlərinə baxsanız, Camunda-nın "mehribanlığı"nın əsasən Java tərtibatçılarına yönəldiyi təəssüratını əldə edə bilərsiniz. Platforma öz funksiyalarınızı və genişləndirmələrinizi birləşdirmək üçün bir çox variant təqdim edir, lakin hamısı Java-da edilir. Doğrudanmı?

Yox! Əslində, siz heç bir Java məlumatı olmadan Camunda-nı asanlıqla işlədə və istədiyiniz dildə kod üçün arxitektura qura bilərsiniz. Bu yazıda biz baxacağıq:

  • əsas memarlıq;
  • REST API
  • Java-dan başqa dillər üçün mövcud müştəri kitabxanalarına dair məsləhət;
  • C# və Node.JS istifadə edərək nümunə;
  • Camunda serverini işə salmağın yolları (Docker və ya Tomcat).

memarlıq

Camunda Java-da yazılmışdır və işləmək üçün Java Virtual Maşını (JVM) lazımdır. Camunda, istədiyiniz dildə yazmağa və Camunda ilə REST-dən istifadə etməyə imkan verən REST API təqdim edir:

REST və İş axını Mühərrikinə əsaslanan asan orkestr üçün Camundadan istifadə (Java yoxdur)

Camunda-da iş axınları əsasən XML faylı olan BPMN-də müəyyən edilir. İlə modelləşdirilə bilər Camunda Modeler.

Əvvəlcədən qurulmuş Docker təsviri vasitəsilə Camunda işlətmək

Camunda-nı idarə etməyin ən asan yolu Docker-dən istifadə etməkdir. Camunda-nı işə salmağın alternativ yolları bu məqalənin sonrakı hissəsində təsvir edilmişdir.

REST və İş axını Mühərrikinə əsaslanan asan orkestr üçün Camundadan istifadə (Java yoxdur)

Bu halda, sadəcə çalıştırın:

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

Linux, JVM və ya Tomcats haqqında narahat olmaq lazım deyil. Dockerfiles və əsas sənədlər (məsələn, tələb olunan verilənlər bazalarına qoşulma təlimatları) burada mövcuddur Github.

Camunda Enterprise Edition-ı işə salmaq istəyirsinizsə, asanlıqla dəyişə bilərsiniz Docker faylı.

Bununla belə, Docker ilə Camunda işlətməyin bir mənfi tərəfi var: siz Tomcat-ın həmişə ən son düzəlişləri ehtiva etməyən bir versiyası ilə nəticələnəcəksiniz. Bunun ətrafında işləmək üçün bu nümunədə göstərildiyi kimi istədiyiniz Tomcat paylanması əsasında öz Docker təsvirinizi yarada və ya aşağıda təsvir olunan həllərdən birini istifadə edə bilərsiniz.

Modelin yerləşdirilməsi prosesi

Ardıcıl üç hərəkəti işə salmaq və sonrakı uğursuzluq halında uğurla tamamlanmış hərəkətləri zərif şəkildə kompensasiya etmək istədiyiniz klassik səyahət sifarişi üçün Saga şablonundan istifadə edərək nümunəyə baxaq. BPMN şəklində təmsil olunur, belə görünür:

REST və İş axını Mühərrikinə əsaslanan asan orkestr üçün Camundadan istifadə (Java yoxdur)

İndi istifadə edə bilərsiniz Proses modelinin yerləşdirilməsi üçün REST API. Tutaq ki, onu trip.bpmn olaraq yadda saxladınız və Camunda-nı Docker vasitəsilə işlədin ki, o, localhost:8080-də əlçatan olsun:

  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

İndi qaça bilərsiniz yeni iş axını nümunələri REST API istifadə edərək və iş axını nümunəsi dəyişənləri kimi görmək istədiyiniz məlumatları ötürün:

  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

Növbəti maraqlı sual budur: Camunda avtomobil sifariş etmək kimi prosedurları necə çağırır? Camunda yalnız bəzi daxili qurğulardan istifadə edərək dərhal xidmətlərə zəng edə bilməz (Principle). birləşdiricilər, həm də iş elementlərini bir növ daxili qaydada qoyun. İşçi daha sonra REST vasitəsilə iş elementlərini gətirə, işi yerinə yetirə və Camundaya tamamlamasını söyləyə bilər (Çəkmə prinsipi).

REST və İş axını Mühərrikinə əsaslanan asan orkestr üçün Camundadan istifadə (Java yoxdur)

Beləliklə, əvvəlcə icra etməlisiniz fetchAndLock (çünki digər işçilər sistemi genişləndirmək üçün eyni vaxtda tapşırıqlar ala bilərlər):

  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

Sonra bunu Camundaya deyin işçi işi tamamladı (qeyd edək ki, ilk sorğuda alınan xarici tapşırıq id-sini daxil etməlisiniz):

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

Budur - hələ də Java-ya ehtiyacınız yoxdur, elə deyilmi? Və başlamaq üçün bu kifayətdir!

Müştəri Kitabxanaları

REST API-yə zəng etmək istənilən proqramlaşdırma dilində asandır. JavaScript-də bu, JQuery-dən, C#-da isə System.Net.Http və Newtonsoft.Json-dan istifadə etməklə həyata keçirilir. Amma bu, vaxt aparacaq. Beləliklə, siz sadəcə bəzi müştəri kitabxanasından istifadə edə bilərsiniz.

Hazırda bir neçə hazır müştəri kitabxanası mövcuddur:

  • javascript: əlaqə. Camunda tərəfindən dəstəklənir;
  • Java: əlaqə. Camunda tərəfindən dəstəklənir;
  • C #:əlaqə и əlaqə. Bu layihələrin hər ikisi aralıq vəziyyətdədir və praktiki olaraq fəaliyyətsizdir, lakin yaxşı başlanğıc nöqtəsi kimi xidmət edə bilər;
  • PHP: əlaqə - çox tam deyil və ən son API dəyişikliklərini ehtiva etmir, lakin mən ondan istifadə edən layihələri bilirəm.

JavaScript və Java istisna olmaqla, müştəri kitabxanaları Camunda məhsulunun özünə aid deyil. Onların Camunda-nın bütün REST API xüsusiyyətlərini dəstəkləyəcəyini gözləməyin. Kitabxananın müəyyən funksiyanı təmin etməməsi onun orada olmaması demək deyil, həmişə Camunda REST API-ni yoxlayın. İstinad layihələri kitabxanalardan başlanğıc nöqtəsi və şablon kimi istifadə edir.

C# nümunəsi

Yuxarıdakı müştəri kitabxanasından istifadə edərək, sadəcə olaraq yaza bilərik:

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

Tam işləyən mənbə kodu onlayn tapıla bilər: əlaqə. Başqa bir nümunə burada mövcuddur əlaqə.

Node.js ilə nümunə

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

Ətraflı məlumatı internet saytından əldə etmək olar Github.com

Camunda-nı işə salmağın alternativ yolları

"Camunda müstəqil WAR" ilə xüsusi Docker şəkli

Camunda-dan əvvəlcədən qurulmuş Docker təsvirinə alternativ olaraq Tomcat-ı özünüz hazırlaya bilərsiniz (məsələn, rəsmi Docker Tomcat şəkillərinə əsaslanaraq) və sonra Camunda-nı ona WAR adlanan fayllardan biri kimi kopyalaya bilərsiniz.

REST və İş axını Mühərrikinə əsaslanan asan orkestr üçün Camundadan istifadə (Java yoxdur)

Bir çox əlavə tələbləriniz varsa və Java qurma mühiti qura bilirsinizsə, Camunda Standalone müharibəsini də qura bilərsiniz. Bu nümunələrdə olduğu kimi Maven quruluşunu qurun: qurun Maven müharibə konfiqurasiyası ilə və ya montaj Overlay ilə Maven.

Camunda Tomcat paylanması başlayır

Başqa bir seçim sadəcə Camunda Tomcat paylanmasını yükləmək, onu açmaq və işə salmaqdır. Bunun üçün yalnız kompüterinizdə quraşdırılmış Java Runtime Environment (JRE) tələb olunur. Asanlıqla ola bilər buradan yükləyin.

REST və İş axını Mühərrikinə əsaslanan asan orkestr üçün Camundadan istifadə (Java yoxdur)

Verilənlər bazasını dəyişdirmək və ya başqa bir şey etmək üçün Tomcat kimi konfiqurasiya etməlisiniz sənədlərdə təsvir edilmişdir. Bilirəm ki, Tomcat mürəkkəb səslənə bilər, amma əslində çox sadədir. Və Google prosesdə tələb oluna biləcək hər şeyin cavabını bilir.

Tomcat istifadə edərək Camunda işlədir

Son alternativ Tomcat-ı özünüz qurmaq və ona Camunda quraşdırmaqdır. quraşdırma təsvirindən sonra. Bu sizə Tomcat-ın hansı versiyasını seçdiyinizi istifadə etmək və ya məsələn, Windows xidməti kimi quraşdırmaq imkanı verəcək.

Camundanın istehsala buraxılması

Bu, adətən Camunda-nı işə salmaq üçün bəzi son quraşdırma tələb edir. Camunda-da bunu çox ətraflı təsvir edən təlimatlar var, lakin mən bu məqalədə onlara daxil olmayacağam - yalnız bir misal çəkəcəyəm: paylamanın REST API-si standart olaraq autentifikasiya üçün konfiqurasiya edilməyib. Bunu dəyişmək istəyə bilərsiniz.

Cəmlənməsi-up

Gördüyünüz kimi, istifadə etdiyiniz dildən asılı olmayaraq Camunda ilə işə başlamaq çox asandır. Əsas odur ki, bütün qarşılıqlı əlaqə REST API vasitəsilə həyata keçirilir. Quraşdırma da olduqca asandır, xüsusən Docker istifadə edərkən.

Mənbə: www.habr.com

Добавить комментарий