Эй Хабр! Сиздердин назарыңыздарга макаланын котормосун сунуштайм Бернд Рюкер тарабынан.
07.07.2020, котормо Бернд Ракер

Мен микросервис архитектурасын Java эмес адамдар менен көп талкуулайм: C# иштеп чыгуучулары, Node.JS/JavaScript иштеп чыгуучулары же Голанг сүйүүчүлөрү. Алардын бардыгына микросервис архитектурасында оркестрлөө механизми же жөн гана жумуш процессин иретке келтирүү жана заказ кылуу, тайм-ауттарды, Сага жана компенсациялоочу транзакцияларды башкаруу мүмкүнчүлүгүн алуу үчүн курал керек экендигине туш болушат.
BPM платформасы менен мындай милдеттер үчүн абдан жакшы. Иштеп чыгуучуларга ыңгайлуулугу буюмдун негизги өзгөчөлүктөрүнүн бири болуп саналат. Бирок анын документтерин карасаңыз, Камунданын "достугу" негизинен Java иштеп чыгуучуларына багытталгандай таасир калтырышы мүмкүн. Платформа өз функцияларыңызды жана кеңейтүүлөрүңүздү туташтыруу үчүн көптөгөн мүмкүнчүлүктөрдү камсыз кылат, бирок мунун баары Javaда жасалган. Чын элеби?
Жок! Чындыгында, сиз эч кандай Java билими жок эле Камунданы оңой иштетип, архитектураны өзүңүз каалаган тилде коддоо үчүн конфигурациялай аласыз. Бул макалада биз карап чыгабыз:
- негизги архитектура;
- REST API
- Java тилдеринен башка тилдер үчүн иштеп жаткан кардарлардын китепканалары боюнча кеңеш берүү;
- мисал C# жана Node.JS колдонуу;
- Camunda серверин баштоонун жолдору (Docker же Tomcat).
архитектура
Камунда Java тилинде жазылган жана иштетүү үчүн Java Virtual Machine (JVM) керек. Camunda сизге каалаган тилде жазууга жана Camunda менен REST колдонууга мүмкүндүк берген REST API менен камсыз кылат:

Камундадагы иш процесстери BPMNде аныкталган, ал негизинен XML файлы. Аны менен моделдештирсе болот .
Камунданы алдын ала түзүлгөн Докер сүрөтү аркылуу иштетүү
Камунданы иштетүүнүн эң оңой жолу - Докерди колдонуу. Камунданы ишке киргизүүнүн альтернативалуу жолдору бул макалада кийинчерээк баяндалат.

Бул учурда, жөн гана чуркап:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Вам не нужно волноваться о Linux, виртуальных машинах Java или Tomcats. Dockerfiles и основная документация (например, инструкция по подключению к нужным базам данных) доступны на .
Эгер сиз Camunda Enterprise Edition иштеткиңиз келсе, сиз оңой өзгөртө аласыз .
Бирок, Камунданы Docker менен иштетүү бир кемчилиги бар: сиз Tomcat версиясына ээ болосуз, ал дайыма акыркы оңдоолорду камтыбайт. Мунун тегерегинде иштөө үчүн, бул мисалда көрсөтүлгөндөй, керектүү Tomcat дистрибутивинин негизинде өзүңүздүн Docker сүрөтүңүздү түзө аласыз же төмөндө сүрөттөлгөн чечимдердин бирин колдонсоңуз болот.
Процесс моделин жайылтуу
Классикалык саякатка ээлөө үчүн Saga үлгүсүн колдонуунун мисалын карап көрөлү, анда сиз үч аракетти катары менен ишке киргизгиңиз келет жана кийинчерээк ишке ашпай калса, ийгиликтүү аяктаган аракеттердин ордун сонун толтургуңуз келет. BPMN түрүндө көрсөтүлгөн, ал төмөнкүдөй көрүнөт:

Эми сиз колдоно аласыз . Сиз аны trip.bpmn катары сактап, Камунданы Docker аркылуу иштетип, ал localhost:8080де жеткиликтүү болду дейли:
curl -w "n"
-H "Accept: application/json"
-F "deployment-name=trip"
-F "enable-duplicate-filtering=true"
-F "deploy-changed-only=true"
-F "trip.bpmn=@trip.bpmn"
http://localhost:8080/engine-rest/deployment/creat
Эми сиз чуркай аласыз REST API колдонуп жана иш процессинин инстанциясынын өзгөрмөлөрү катары көргүңүз келген маалыматтарды өткөрүп бериңиз:
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
Кийинки кызыктуу суроо: Камунда унааны брондоо сыяктуу процедураларды кантип чакырат? Камунда айрым орнотулгандарды колдонуу менен кызматтарды дароо чакыра албайт (Push-Principle). , бирок ошондой эле орнотулган тартипте кандайдыр бир иш буюмдарды коюу. Андан кийин жумушчу REST аркылуу жумуш буюмдарын алып келип, ишти аткарып, Камундага аягына чыгарууну айта алат (Пулл-Принцип).

Ошентип, адегенде аткаруу керек (анткени башка жумушчулар системаны масштабдоо үчүн бир эле учурда тапшырмаларды ала алышат):
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
Болду - сизге дагы эле Java керек эмес, туурабы? Жана бул баштоо үчүн жетиштүү!
Кардар китепканалары
REST API чалуу бардык программалоо тилинде оңой. JavaScript'те бул JQuery менен, ал эми C# тилинде System.Net.Http жана Newtonsoft.Json аркылуу ыңгайлуу жасалат. Бирок бул убакытты талап кылат. Ошентип, сиз жөн гана кээ бир кардар китепканасын колдоно аласыз.
Азыркы учурда, бир нече даяр кардарлар китепканалары бар:
- javascript: . Камунда тарабынан колдоого алынган;
- Java: . Камунда тарабынан колдоого алынган;
- C #: и . Бул долбоорлордун экөө тең ортоңку абалда жана иш жүзүндө иштебей турат, бирок жакшы башталгыч чекит катары кызмат кыла алат;
- PHP: - өтө толук эмес жана акыркы API өзгөртүүлөрдү камтыбайт, бирок мен аны колдонгон долбоорлорду билем.
JavaScript жана Javaдан башкасы, кардар китепканалары Camunda продуктунун бир бөлүгү эмес. Алардан Camunda's REST API функцияларынын баарын колдойт деп күтпөңүз. Китепкана белгилүү бир функцияны камсыз кылбагандыктан, ал жок дегенди билдирбейт, ар дайым Camunda's REST API текшериңиз. Маалымдама долбоорлору китепканаларды баштапкы чекит жана шаблон катары колдонушат.
C# мисалы
Жогорудагы кардар китепканасын колдонуп, биз жөн гана жаза алабыз:
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", "..." }
});
Толук иштеп жаткан булак кодун интернеттен тапса болот: . Дагы бир мисал болот .
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();
Көбүрөөк маалыматты сайттан тапса болот
Камунданы ишке киргизүүнүн альтернативалуу жолдору
"Камунда автономдуу WAR" менен жеке Docker сүрөтү
Камундадан алдын ала жасалган Docker сүрөтүнө альтернатива катары, сиз Tomcat'ты өзүңүз даярдасаңыз болот (мисалы, расмий Docker Tomcat сүрөттөрүнүн негизинде), андан кийин ага WAR деп аталган файлдардын бири катары Камунданы көчүрө аласыз.

Эгер сизде көптөгөн кошумча талаптар болсо жана Java куруу чөйрөсүн орното алсаңыз, Камунда автономдуу согушун да орното аласыз. Бул мисалдардагыдай Maven түзүмүн орнотуңуз: куруу же чогулуш .
Camunda Tomcat бөлүштүрүүнү баштоо
Дагы бир вариант - жөн гана Camunda Tomcat бөлүштүрүүнү жүктөп алып, аны ачып, иштетүү. Бул үчүн компьютериңизде орнотулган Java Runtime Environment (JRE) гана талап кылынат. Бул оңой болот .

Маалыматтар базасын өзгөртүү же башка бир нерсе кылуу үчүн Tomcat сыяктуу конфигурациялашыңыз керек . Мен Tomcat татаал угулушу мүмкүн экенин билем, бирок бул абдан жөнөкөй. Жана Google процессте талап кылынышы мүмкүн болгон бардык суроолорго жоопторду билет.
Tomcat аркылуу Камунданы иштетүү
Акыркы альтернатива - Tomcat'ти өзүңүз орнотуу жана ага Камунданы орнотуу, . Это даст возможность использовать любую версию Tomcat, которую вы предпочитаете, или, например, установить ее в качестве службы Windows.
Камунда өндүрүшкө киргизилүүдө
Бул, адатта, Камунданы иштетүү үчүн акыркы орнотууну талап кылат. Камундада муну майда-чүйдөсүнө чейин сүрөттөгөн көрсөтмөлөр бар, бирок мен бул макалада аларга кирбейм - мен бир эле мисалды атайм: бөлүштүрүүнүн REST API демейки боюнча аутентификация үчүн конфигурацияланган эмес. Сиз муну өзгөрткүңүз келиши мүмкүн.
Жыйынтык чыгаруу
Көрүнүп тургандай, сиз колдонуп жаткан тилге карабастан, Camunda менен баштоо абдан оңой. Негизги нерсе, бардык өз ара аракеттенүү REST API аркылуу ишке ашат. Орнотуу да абдан оңой, айрыкча Dockerди колдонууда.
Source: www.habr.com
