REST болон Workflow хөдөлгүүрт суурилсан хялбар зохион байгуулалтад зориулж Camunda-г ашиглах (Java байхгүй)

Хөөе Хабр! Би нийтлэлийн орчуулгыг та бүхэнд толилуулж байна "Camunda-г ашиглахад хялбар REST-д суурилсан зохион байгуулалт, ажлын урсгалын хөдөлгүүр болгон ашигла (Java-д хүрэлгүйгээр)" Бернд Рюкер.

07.07.2020, орчуулга нийтлэл Бернд Рюкер

REST болон Workflow хөдөлгүүрт суурилсан хялбар зохион байгуулалтад зориулж Camunda-г ашиглах (Java байхгүй)

Би микро үйлчилгээний архитектурын талаар ихэвчлэн Java бус хүмүүстэй ярилцдаг: C#, Node.JS/JavaScript хөгжүүлэгчид эсвэл Голанг сонирхогчид. Тэд бүгдээрээ бичил үйлчилгээний архитектурт зохион байгуулах хөдөлгүүр эсвэл зүгээр л ажлын урсгалыг оновчтой болгох, захиалга хийх, завсарлага, гүйлгээ, нөхөн олговор хийх чадварыг олж авах хэрэгсэл хэрэгтэй гэсэн асуудалтай тулгарч байна.

BPM платформтой Камундагаас нээлттэй эх сурвалж ийм даалгаварт тохиромжтой. Хөгжүүлэгчийн найрсаг байдал нь бүтээгдэхүүний гол шинж чанаруудын нэг юм. Гэхдээ хэрэв та түүний баримт бичгийг харвал Камундагийн найрсаг байдал нь ихэвчлэн Java хөгжүүлэгчдэд чиглэгддэг гэсэн сэтгэгдэл төрж магадгүй юм. Энэхүү платформ нь өөрийн функц, өргөтгөлүүдийг холбох олон боломжийг олгодог боловч бүгдийг Java дээр хийдэг. Үнэхээр тийм үү?

Үгүй! Үнэн хэрэгтээ та ямар ч Java мэдлэггүйгээр Camunda-г хялбархан ажиллуулж, архитектурыг хүссэн хэлээрээ кодлохоор тохируулах боломжтой. Энэ нийтлэлд бид дараахь зүйлийг авч үзэх болно.

  • үндсэн архитектур;
  • REST API;
  • Java-аас бусад хэл дээрх үйлчлүүлэгчийн номын сангийн талаар зөвлөгөө өгөх;
  • жишээ нь C# болон Node.JS ашиглан;
  • Camunda серверийг эхлүүлэх арга замууд (Docker эсвэл Tomcat).

архитектур

Camunda нь Java хэл дээр бичигдсэн бөгөөд ажиллахын тулд Java Virtual Machine (JVM) шаардлагатай. Camunda нь танд дуртай хэлээрээ бичих, REST-ийг Camunda-тай ашиглах боломжийг олгодог REST API-г өгдөг.

REST болон Workflow хөдөлгүүрт суурилсан хялбар зохион байгуулалтад зориулж Camunda-г ашиглах (Java байхгүй)

Камунда дахь ажлын урсгалыг BPMN-д тодорхойлсон бөгөөд энэ нь үндсэндээ XML файл юм. Үүнийг загварчилж болно Камунда загварчлагч.

Урьдчилан бүтээсэн Docker дүрсээр Камундаг ажиллуулж байна

Камундаг ажиллуулах хамгийн хялбар арга бол Docker ашиглах явдал юм. Camunda-г эхлүүлэх өөр аргуудыг энэ өгүүллийн дараа тайлбарласан болно.

REST болон Workflow хөдөлгүүрт суурилсан хялбар зохион байгуулалтад зориулж Camunda-г ашиглах (Java байхгүй)

Энэ тохиолдолд зүгээр л ажиллуул:

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

Та Linux, JVM эсвэл Tomcats-ийн талаар санаа зовох хэрэггүй. Докер файлууд болон үндсэн баримт бичгүүдийг (жишээлбэл, шаардлагатай мэдээллийн сантай холбогдох заавар) эндээс авах боломжтой Github.

Хэрэв та Camunda Enterprise Edition-г ажиллуулахыг хүсвэл амархан өөрчилж болно Докер файл.

Гэсэн хэдий ч, Docker ашиглан Camunda-г ажиллуулах нэг сул тал бий: та Tomcat-ийн хамгийн сүүлийн үеийн засваруудыг үргэлж оруулдаггүй хувилбартай болно. Үүнийг ямар нэгэн байдлаар даван туулахын тулд та энэ жишээнд үзүүлсэн шиг хүссэн Tomcat түгээлт дээр үндэслэн Docker дүрсийг өөрөө үүсгэж эсвэл доор тайлбарласан шийдлүүдийн аль нэгийг ашиглаж болно.

Процессын загвар байршуулалт

Сонгодог аялалын захиалгын хувьд Saga загварыг ашиглан гурван үйлдлийг дараалан өдөөж, дараа нь бүтэлгүйтсэн тохиолдолд амжилттай үйлдлүүдийг нөхөхийг хүсч буй жишээг харцгаая. BPMN хэлбэрээр дүрсэлсэн нь дараах байдалтай байна.

REST болон Workflow хөдөлгүүрт суурилсан хялбар зохион байгуулалтад зориулж Camunda-г ашиглах (Java байхгүй)

Одоо та ашиглаж болно Процессын загварыг байрлуулахад зориулсан REST API. Та үүнийг trip.bpmn гэж хадгалаад Docker-ээр дамжуулан Camunda-г ажиллуулснаар 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

Одоо та гүйж болно ажлын урсгалын шинэ тохиолдлууд 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

Дараагийн сонирхолтой асуулт бол: Камунда машин захиалах гэх мэт процедурыг хэрхэн дууддаг вэ? Камунда нь зөвхөн үйлчилгээнүүдийг нэн даруй дуудаж чаддаггүй (Түлхэх зарчим) зарим суулгацыг ашиглан холбогч, гэхдээ бас ажлын зүйлсийг нэг төрлийн дарааллаар байрлуулна. Дараа нь ажилтан REST-ээр ажлын зүйлсийг хүлээн авч, ажлыг гүйцэтгэж, Камундад (Татах зарчим) тайлагнаж болно.

REST болон Workflow хөдөлгүүрт суурилсан хялбар зохион байгуулалтад зориулж Camunda-г ашиглах (Java байхгүй)

Тиймээс та эхлээд гүйцэтгэх хэрэгтэй fetchAndLock (бусад ажилчид системийг өргөжүүлэх даалгавруудыг нэгэн зэрэг хүлээн авах боломжтой тул):

  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

Тэгээд Камундад хэлээрэй Ажилчин ажлаа дуусгасан (та эхний хүсэлтэд хүлээн авсан гадаад даалгаврын ID-г оруулах ёстойг анхаарна уу):

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

Дэлгэрэнгүй мэдээллийг вэбсайтаас авах боломжтой Github.com

Камундаг хөөргөх өөр аргууд

"Камунда бие даасан WAR"-тай тусгай Docker зураг

Camunda-аас урьдчилан бүтээсэн Docker зургийн өөр хувилбар болгон та Tomcat-ийг өөрөө бэлдэж (жишээлбэл, Docker Tomcat-ийн албан ёсны зургууд дээр үндэслэн) Camunda-г WAR гэж нэрлэгддэг файлуудын нэг болгон хуулж болно.

REST болон Workflow хөдөлгүүрт суурилсан хялбар зохион байгуулалтад зориулж Camunda-г ашиглах (Java байхгүй)

Хэрэв танд олон нэмэлт шаардлага байгаа бөгөөд Java-г бүтээх орчинг тохируулж чадвал Camunda Standalone дайныг бас тохируулж болно. Эдгээр жишээн дээрх шиг Maven бүтцийг тохируулна уу: build Дайны тохиргоотой Maven эсвэл угсралт Давхардсан Maven.

Camunda Tomcat түгээлтийг эхлүүлж байна

Өөр нэг сонголт бол зүгээр л Camunda Tomcat түгээлтийг татаж аваад задлаад ажиллуулах явдал юм. Үүнийг хийхийн тулд танд зөвхөн Java Runtime Environment (JRE) компьютер дээрээ суулгасан байх шаардлагатай. Энэ нь амархан байж болно эндээс татаж авна уу.

REST болон Workflow хөдөлгүүрт суурилсан хялбар зохион байгуулалтад зориулж Camunda-г ашиглах (Java байхгүй)

Өгөгдлийн санг өөрчлөх эсвэл өөр ямар нэгэн зүйл хийхийн тулд та Tomcat-ийн тохиргоог хийх хэрэгтэй баримт бичигт тодорхойлсон. Tomcat нь төвөгтэй мэт санагдаж магадгүй ч үнэндээ маш энгийн зүйл гэдгийг би мэднэ. Мөн Google энэ үйл явцад шаардлагатай байж болох бүх зүйлийн хариултыг мэддэг.

Tomcat ашиглан Camunda ажиллуулж байна

Сүүлийн хувилбар бол Tomcat-г өөрөө тохируулж, түүнд Camunda суулгах явдал юм. суулгацын тайлбарын дагуу. Энэ нь танд Tomcat-ийн аль ч хувилбарыг ашиглах, жишээлбэл, Windows үйлчилгээ болгон суулгах боломжийг олгоно.

Камундаг үйлдвэрлэлд нэвтрүүлсэн

Энэ нь ихэвчлэн Camunda-г ажиллуулахын тулд эцсийн тохиргоог шаарддаг. Камундад үүнийг нарийвчлан тайлбарласан удирдамжууд байдаг, гэхдээ би энэ нийтлэлд тэдгээрийг авч үзэхгүй - би зөвхөн нэг жишээг нэрлэх болно: түгээлтийн REST API нь анхдагчаар баталгаажуулалтад тохируулагдаагүй байна. Та үүнийг өөрчлөхийг хүсч магадгүй юм.

Дуусгах

Та анзаарсан байх, Camunda-г ашиглаж эхлэх нь таны ашигладаг хэлээс үл хамааран маш хялбар байдаг. Хамгийн гол зүйл бол бүх харилцаа холбоо REST API-ээр дамждаг. Суулгах нь маш хялбар, ялангуяа Docker ашиглах үед.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх