Коришћење Цамунде за лаку оркестрацију засновану на РЕСТ-у и Воркфлов Енгине (без Јава)

Здраво, Хабр! Представљам вашој пажњи превод чланка „Користите Цамунду као механизам за оркестрацију и радни ток који је једноставан за коришћење (без додиривања Јаве)“ од Бернда Рикера.

07.07.2020, превод Чланак Бернд Руцкер

Коришћење Цамунде за лаку оркестрацију засновану на РЕСТ-у и Воркфлов Енгине (без Јава)

Често разговарам о микросервисној архитектури са људима који нису Јава: Ц#, Ноде.ЈС/ЈаваСцрипт програмери или Голанг ентузијасти. Сви они су суочени са чињеницом да им је потребан механизам оркестрације у микросервисној архитектури или само алат за оптимизацију тока посла и добијање могућности за наручивање, руковање временским ограничењима, Сагом и компензационим трансакцијама.

БПМ платформа са отвореног кода из Цамунде одличан за такве задатке. Погодност за програмере је једна од кључних карактеристика производа. Али ако погледате његову документацију, можда ћете стећи утисак да је Цамунда љубазност углавном усмерена на Јава програмере. Платформа пружа много могућности за повезивање сопствених функција и екстензија, али све се ради у Јави. Да ли је заиста?

Не! У ствари, можете лако да покренете Цамунду без икаквог знања о Јави и да конфигуришете архитектуру да кодира на било ком језику по вашем избору. У овом чланку ћемо погледати:

  • основна архитектура;
  • РЕСТ АПИ;
  • савети о постојећим клијентским библиотекама за језике који нису Јава;
  • пример коришћења Ц# и Ноде.ЈС;
  • начине за покретање Цамунда сервера (Доцкер или Томцат).

архитектура

Цамунда је написана на Јави и захтева Јава виртуелну машину (ЈВМ) за покретање. Цамунда пружа РЕСТ АПИ који вам омогућава да пишете на било ком језику који желите и користите РЕСТ са Цамундом:

Коришћење Цамунде за лаку оркестрацију засновану на РЕСТ-у и Воркфлов Енгине (без Јава)

Токови рада у Цамунди су дефинисани у БПМН, који је у основи КСМЛ датотека. Може се моделовати помоћу Цамунда Моделер.

Покретање Цамунде преко унапред направљене Доцкер слике

Најлакши начин да покренете Цамунду је да користите Доцкер. Алтернативни начини покретања Цамунде описани су касније у овом чланку.

Коришћење Цамунде за лаку оркестрацију засновану на РЕСТ-у и Воркфлов Енгине (без Јава)

У овом случају, само покрените:

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

Не морате да бринете о Линук, Јава виртуелним машинама или Томцатс. Доцкер фајлови и основна документација (на пример, упутства за повезивање са потребним базама података) доступни су на Гитхуб.

Ако желите да покренете Цамунда Ентерприсе Едитион, можете лако да промените Доцкерфиле.

Међутим, постоји један недостатак покретања Цамунде користећи Доцкер: на крају ћете добити верзију Томцат-а која не укључује увек најновије исправке. Да бисте то некако заобишли, можете сами да креирате Доцкер слику на основу жељене Томцат дистрибуције, као што је приказано у овом примеру, или користите једно од решења описаних у наставку.

Примена модела процеса

Хајде да погледамо пример коришћења шаблона Сага за класичну резервацију путовања где желите да покренете три акције заредом и елегантно надокнадите успешне акције у случају каснијег неуспеха. Представљен у БПМН облику, изгледа овако:

Коришћење Цамунде за лаку оркестрацију засновану на РЕСТ-у и Воркфлов Енгине (без Јава)

Сада можете користити РЕСТ АПИ за примену модела процеса. Рецимо да сте га сачували као трип.бпмн и покренули Цамунда преко Доцкер-а тако да је био доступан на лоцалхост: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

Сада можете да трчите нове инстанце тока посла користећи РЕСТ АПИ и прослеђивање података које желите да видите као променљиве инстанце тока посла:

  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

Следеће занимљиво питање је како Цамунда покреће процедуре као што је резервација аутомобила? Цамунда не може само одмах да позове услуге (Пусх-Принципле), користећи неке уграђене конектори, али и ставити радне ставке у неку врсту уграђеног реда. Радник тада може да прими радне ставке преко РЕСТ-а, изврши посао и пријави завршетак Цамунди (принцип повлачења).

Коришћење Цамунде за лаку оркестрацију засновану на РЕСТ-у и Воркфлов Енгине (без Јава)

Дакле, прво треба да урадите фетцхАндЛоцк (пошто други радници могу истовремено да примају задатке да скалирају систем):

  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

Онда реци то Камунди радник је завршио свој посао (имајте на уму да морате да унесете спољни ИД задатка примљен у првом захтеву):

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

То је то - до сада вам није требала Јава, зар не? И то је довољно за почетак!

Клијентске библиотеке

Позивање РЕСТ АПИ-ја је лако у било ком програмском језику. У ЈаваСцрипт-у је то згодно урадити помоћу ЈКуери-а, ау Ц#-у можете користити Систем.Нет.Хттп и Невтонсофт.Јсон. Али ово ће потрајати. Дакле, можете користити само неку клијентску библиотеку.

Тренутно је доступно неколико готових клијентских библиотека:

  • ЈаваСцрипт: веза. Подржава Цамунда;
  • Јава: веза. Подржава Цамунда;
  • Ц #:веза и веза. Оба ова пројекта су у средњем стању и практично немају никакву активност, али могу послужити као добра полазна тачка;
  • ПХП: веза није баш комплетна библиотека и не укључује најновије промене АПИ-ја, али знам за пројекте који је користе.

Са изузетком ЈаваСцрипт-а и Јаве, клијентске библиотеке нису део самог производа Цамунда. Не очекујте да ће подржавати све функције РЕСТ АПИ-ја Цамунде. Само зато што библиотека не пружа одређену функцију не значи да није ту, увек проверите Цамунда РЕСТ АПИ. Типични пројекти користе библиотеке као полазну тачку и шаблон.

Пример са Ц#

Користећи горњу библиотеку клијента, можемо једноставно написати:

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

Комплетан радни изворни код се може наћи на мрежи: веза. Други пример је доступан на веза.

Пример са Ноде.јс

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

Више информација можете пронаћи на веб страници Гитхуб.цом

Алтернативни начини за покретање Цамунде

Прилагођена Доцкер слика са „Цамунда стандалоне ВАР“

Као алтернативу унапред направљеној Доцкер слици из Цамунде, можете сами припремити Томцат (на пример, на основу званичних Доцкер Томцат слика) и затим копирати Цамунду у њега као једну од такозваних ВАР датотека.

Коришћење Цамунде за лаку оркестрацију засновану на РЕСТ-у и Воркфлов Енгине (без Јава)

Ако имате много додатних захтева и можете да прилагодите Јава окружење за прављење, такође можете да конфигуришете Цамунда Стандалоне вар. Подесите Мавен буилд као у овим примерима: буилд Мавен са ратном конфигурацијом или скупштина Мавен са преклапањем.

Покретање дистрибуције Цамунда Томцат

Друга опција је да једноставно преузмете Цамунда Томцат дистрибуцију, распакујете је и покренете. Да бисте то урадили, потребно вам је само Јава Рунтиме Енвиронмент (ЈРЕ) инсталирано на вашем рачунару. Може бити лако преузмите одавде.

Коришћење Цамунде за лаку оркестрацију засновану на РЕСТ-у и Воркфлов Енгине (без Јава)

Да бисте променили базу података или урадили било шта друго, потребно је да конфигуришете Томцат као описано у документацији. Знам да Томцат може изгледати компликовано, али је заправо врло једноставно. А Гоогле има одговоре на све што вам може затребати у том процесу.

Покретање Цамунде користећи Томцат

Последња алтернатива је да сами конфигуришете Томцат и инсталирате Цамунда у њега, пратећи опис инсталације. Ово ће вам дати прилику да користите било коју верзију Томцат-а коју желите, или, на пример, да је инсталирате као Виндовс услугу.

Лансирање Цамунде у производњу

Обично ће то захтевати да урадите неко коначно подешавање да бисте покренули Цамунда. Цамунда има смернице које ово описују веома детаљно, али их нећу додиривати у овом чланку – даћу само један пример: РЕСТ АПИ дистрибуције није подразумевано конфигурисан за аутентификацију. Можда бисте желели да промените ово.

Сумирање

Као што сте можда приметили, почетак рада са Цамундом је веома лак, без обзира на језик који користите. Кључна ствар је да се сва комуникација обавља преко РЕСТ АПИ-ја. Инсталација је такође прилично једноставна, посебно када користите Доцкер.

Извор: ввв.хабр.цом

Додај коментар