Хөөе Хабр! Би нийтлэлийн орчуулгыг та бүхэнд толилуулж байна
07.07.2020, орчуулга
Би микро үйлчилгээний архитектурын талаар ихэвчлэн Java бус хүмүүстэй ярилцдаг: C#, Node.JS/JavaScript хөгжүүлэгчид эсвэл Голанг сонирхогчид. Тэд бүгдээрээ бичил үйлчилгээний архитектурт зохион байгуулах хөдөлгүүр эсвэл зүгээр л ажлын урсгалыг оновчтой болгох, захиалга хийх, завсарлага, гүйлгээ, нөхөн олговор хийх чадварыг олж авах хэрэгсэл хэрэгтэй гэсэн асуудалтай тулгарч байна.
BPM платформтой
Үгүй! Үнэн хэрэгтээ та ямар ч Java мэдлэггүйгээр Camunda-г хялбархан ажиллуулж, архитектурыг хүссэн хэлээрээ кодлохоор тохируулах боломжтой. Энэ нийтлэлд бид дараахь зүйлийг авч үзэх болно.
- үндсэн архитектур;
- REST API;
- Java-аас бусад хэл дээрх үйлчлүүлэгчийн номын сангийн талаар зөвлөгөө өгөх;
- жишээ нь C# болон Node.JS ашиглан;
- Camunda серверийг эхлүүлэх арга замууд (Docker эсвэл Tomcat).
архитектур
Camunda нь Java хэл дээр бичигдсэн бөгөөд ажиллахын тулд Java Virtual Machine (JVM) шаардлагатай. Camunda нь танд дуртай хэлээрээ бичих, REST-ийг Camunda-тай ашиглах боломжийг олгодог REST API-г өгдөг.
Камунда дахь ажлын урсгалыг BPMN-д тодорхойлсон бөгөөд энэ нь үндсэндээ XML файл юм. Үүнийг загварчилж болно
Урьдчилан бүтээсэн Docker дүрсээр Камундаг ажиллуулж байна
Камундаг ажиллуулах хамгийн хялбар арга бол Docker ашиглах явдал юм. Camunda-г эхлүүлэх өөр аргуудыг энэ өгүүллийн дараа тайлбарласан болно.
Энэ тохиолдолд зүгээр л ажиллуул:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Та Linux, JVM эсвэл Tomcats-ийн талаар санаа зовох хэрэггүй. Докер файлууд болон үндсэн баримт бичгүүдийг (жишээлбэл, шаардлагатай мэдээллийн сантай холбогдох заавар) эндээс авах боломжтой
Хэрэв та Camunda Enterprise Edition-г ажиллуулахыг хүсвэл амархан өөрчилж болно
Гэсэн хэдий ч, Docker ашиглан Camunda-г ажиллуулах нэг сул тал бий: та Tomcat-ийн хамгийн сүүлийн үеийн засваруудыг үргэлж оруулдаггүй хувилбартай болно. Үүнийг ямар нэгэн байдлаар даван туулахын тулд та энэ жишээнд үзүүлсэн шиг хүссэн Tomcat түгээлт дээр үндэслэн Docker дүрсийг өөрөө үүсгэж эсвэл доор тайлбарласан шийдлүүдийн аль нэгийг ашиглаж болно.
Процессын загвар байршуулалт
Сонгодог аялалын захиалгын хувьд Saga загварыг ашиглан гурван үйлдлийг дараалан өдөөж, дараа нь бүтэлгүйтсэн тохиолдолд амжилттай үйлдлүүдийг нөхөхийг хүсч буй жишээг харцгаая. BPMN хэлбэрээр дүрсэлсэн нь дараах байдалтай байна.
Одоо та ашиглаж болно
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
Одоо болтол танд Java хэрэггүй байсан, тийм ээ? Энэ нь эхлэхэд хангалттай!
Үйлчлүүлэгчийн номын сангууд
REST API дуудах нь ямар ч програмчлалын хэлэнд хялбар байдаг. JavaScript дээр үүнийг JQuery, C# хэл дээр System.Net.Http болон Newtonsoft.Json ашиглан хийхэд хялбар байдаг. Гэхдээ үүнд цаг хугацаа хэрэгтэй. Тиймээс та зөвхөн үйлчлүүлэгчийн номын санг ашиглаж болно.
Одоогийн байдлаар хэд хэдэн бэлэн үйлчлүүлэгч номын сангууд бэлэн байна:
- javascript:
ссылка . Камунда дэмжсэн; - Жава:
ссылка . Камунда дэмжсэн; - C #:
ссылка иссылка . Эдгээр хоёр төсөл хоёулаа завсрын төлөвт байгаа бөгөөд бараг ямар ч үйл ажиллагаа байхгүй, гэхдээ сайн эхлэлийн цэг болж чадна; - PHP:
ссылка Энэ нь маш бүрэн номын сан биш бөгөөд хамгийн сүүлийн үеийн API өөрчлөлтийг оруулаагүй боловч үүнийг ашигладаг төслүүдийг би мэднэ.
JavaScript болон Java-г эс тооцвол үйлчлүүлэгчийн номын сан нь Camunda бүтээгдэхүүний нэг хэсэг биш юм. Тэд Camunda-ийн REST API-ийн бүх функцийг дэмжинэ гэж битгий бодоорой. Номын сан нь тодорхой функцээр хангагдаагүй байгаа нь тэнд байхгүй гэсэн үг биш юм. Camunda-н 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 зураг
Camunda-аас урьдчилан бүтээсэн Docker зургийн өөр хувилбар болгон та Tomcat-ийг өөрөө бэлдэж (жишээлбэл, Docker Tomcat-ийн албан ёсны зургууд дээр үндэслэн) Camunda-г WAR гэж нэрлэгддэг файлуудын нэг болгон хуулж болно.
Хэрэв танд олон нэмэлт шаардлага байгаа бөгөөд Java-г бүтээх орчинг тохируулж чадвал Camunda Standalone дайныг бас тохируулж болно. Эдгээр жишээн дээрх шиг Maven бүтцийг тохируулна уу: build
Camunda Tomcat түгээлтийг эхлүүлж байна
Өөр нэг сонголт бол зүгээр л Camunda Tomcat түгээлтийг татаж аваад задлаад ажиллуулах явдал юм. Үүнийг хийхийн тулд танд зөвхөн Java Runtime Environment (JRE) компьютер дээрээ суулгасан байх шаардлагатай. Энэ нь амархан байж болно
Өгөгдлийн санг өөрчлөх эсвэл өөр ямар нэгэн зүйл хийхийн тулд та Tomcat-ийн тохиргоог хийх хэрэгтэй
Tomcat ашиглан Camunda ажиллуулж байна
Сүүлийн хувилбар бол Tomcat-г өөрөө тохируулж, түүнд Camunda суулгах явдал юм.
Камундаг үйлдвэрлэлд нэвтрүүлсэн
Энэ нь ихэвчлэн Camunda-г ажиллуулахын тулд эцсийн тохиргоог шаарддаг. Камундад үүнийг нарийвчлан тайлбарласан удирдамжууд байдаг, гэхдээ би энэ нийтлэлд тэдгээрийг авч үзэхгүй - би зөвхөн нэг жишээг нэрлэх болно: түгээлтийн REST API нь анхдагчаар баталгаажуулалтад тохируулагдаагүй байна. Та үүнийг өөрчлөхийг хүсч магадгүй юм.
Дуусгах
Та анзаарсан байх, Camunda-г ашиглаж эхлэх нь таны ашигладаг хэлээс үл хамааран маш хялбар байдаг. Хамгийн гол зүйл бол бүх харилцаа холбоо REST API-ээр дамждаг. Суулгах нь маш хялбар, ялангуяа Docker ашиглах үед.
Эх сурвалж: www.habr.com