Оңай REST негізіндегі оркестр мен жұмыс процесі механизмі үшін Camunda пайдалану (Java жоқ)

Эй Хабр! Назарларыңызға мақаланың аудармасын ұсынамын «Camunda-ны пайдалану оңай REST негізіндегі оркестрлеу және жұмыс процесі қозғалтқышы ретінде пайдаланыңыз (Java-ға тигізбестен)» Бернд Рюкер.

07.07.2020, аударма мақалалар Бернд Рюкер

Оңай REST негізіндегі оркестр мен жұмыс процесі механизмі үшін Camunda пайдалану (Java жоқ)

Мен микросервис архитектурасын Java емес адамдармен жиі талқылаймын: C#, Node.JS/JavaScript әзірлеушілері немесе Голанг энтузиастары. Олардың барлығына микросервис архитектурасындағы оркестрлік қозғалтқыш немесе жұмыс процесін оңтайландыру және тапсырыс беру, күту уақытын өңдеу, Сага және өтемдік транзакцияларды өңдеу мүмкіндігін алу үшін жай ғана құрал қажет екендігімен бетпе-бет келеді.

BPM платформасы бар Камундадан ашық көзі мұндай тапсырмалар үшін тамаша. Әзірлеушіге ыңғайлылық - өнімнің негізгі ерекшеліктерінің бірі. Бірақ оның құжаттамасына қарасаңыз, Камунданың мейірімділігі негізінен Java әзірлеушілеріне бағытталған сияқты әсер қалдыруыңыз мүмкін. Платформа өзіңіздің функцияларыңыз бен кеңейтімдеріңізді қосуға көптеген мүмкіндіктер береді, бірақ мұның бәрі Java тілінде жасалған. Шынымен солай ма?

Жоқ! Шын мәнінде, сіз Camunda бағдарламасын Java білімінсіз оңай іске қоса аласыз және архитектураны өзіңіз таңдаған кез келген тілде кодтау үшін конфигурациялай аласыз. Бұл мақалада біз қарастырамыз:

  • негізгі архитектура;
  • REST API;
  • Java тілінен басқа тілдерге арналған клиенттік кітапханалар бойынша кеңес беру;
  • C# және Node.JS пайдалану мысалы;
  • Camunda серверін іске қосу тәсілдері (Docker немесе Tomcat).

сәулет

Camunda Java тілінде жазылған және жұмыс істеу үшін Java виртуалды машинасын (JVM) қажет етеді. Camunda сізге ұнайтын кез келген тілде жазуға және Camunda-мен бірге REST-ті пайдалануға мүмкіндік беретін REST API ұсынады:

Оңай REST негізіндегі оркестр мен жұмыс процесі механизмі үшін Camunda пайдалану (Java жоқ)

Камундадағы жұмыс процестері негізінен XML файлы болып табылатын BPMN ішінде анықталған. Оны қолдану арқылы модельдеуге болады Камунда модельері.

Камунданы алдын ала жасалған Docker кескіні арқылы іске қосу

Camunda іске қосудың ең оңай жолы - Docker пайдалану. Camunda іске қосудың балама жолдары осы мақалада кейінірек сипатталған.

Оңай REST негізіндегі оркестр мен жұмыс процесі механизмі үшін Camunda пайдалану (Java жоқ)

Бұл жағдайда жай ғана іске қосыңыз:

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

Linux, Java виртуалды машиналары немесе Tomcats туралы алаңдамаудың қажеті жоқ. Докер файлдары және негізгі құжаттама (мысалы, қажетті дерекқорларға қосылу нұсқаулары) мына жерден қол жетімді GitHub.

Camunda Enterprise Edition іске қосқыңыз келсе, оңай өзгертуге болады Докер файлы.

Дегенмен, Docker көмегімен Camunda-ны іске қосудың бір кемшілігі бар: сіз әрқашан соңғы түзетулерді қамтымайтын Tomcat нұсқасына ие боласыз. Осыны қалай да айналып өту үшін, осы мысалда көрсетілгендей қажет Tomcat дистрибутивінің негізінде Docker кескінін өзіңіз жасай аласыз немесе төменде сипатталған шешімдердің бірін пайдалана аласыз.

Процесс үлгісін қолдану

Классикалық саяхатты брондау үшін Saga үлгісін пайдаланатын мысалды қарастырайық, мұнда сіз қатарынан үш әрекетті іске қосқыңыз келетін және кейінірек сәтсіздікке ұшыраған жағдайда сәтті әрекеттердің орнын толтырғыңыз келеді. BPMN түрінде ұсынылған, ол келесідей:

Оңай REST негізіндегі оркестр мен жұмыс процесі механизмі үшін 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

Келесі қызықты сұрақ - Камунда көлікті брондау сияқты процедураларды қалай іске қосады? Camunda кейбір кіріктірілген құрылғыларды пайдаланып қызметтерге (Push-Principle) бірден қоңырау шала алмайды қосқыштар, сонымен қатар жұмыс элементтерін кірістірілген кезек түріне қойыңыз. Содан кейін жұмысшы REST арқылы жұмыс элементтерін қабылдай алады, жұмысты орындап, Камундаға (Pull-Principle) аяқталғаны туралы есеп бере алады.

Оңай REST негізіндегі оркестр мен жұмыс процесі механизмі үшін 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

Сосын Камундаға айт жұмысшы өз жұмысын аяқтады (бірінші сұрауда алынған сыртқы тапсырма идентификаторын енгізу керек екенін ескеріңіз):

  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 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

Камунданы іске қосудың балама жолдары

"Camunda автономды WAR" бар пайдаланушы Docker кескіні

Camunda-дан алдын ала жасалған Docker кескініне балама ретінде сіз Tomcat-ті өзіңіз дайындай аласыз (мысалы, ресми Docker Tomcat кескіндері негізінде), содан кейін оған WAR деп аталатын файлдардың бірі ретінде Camunda-ны көшіре аласыз.

Оңай REST негізіндегі оркестр мен жұмыс процесі механизмі үшін Camunda пайдалану (Java жоқ)

Егер сізде көптеген қосымша талаптар болса және Java құрастыру ортасын теңшей алсаңыз, Camunda Standalone соғысын да теңшей аласыз. Осы мысалдардағыдай Maven құрастыруын орнатыңыз: құрастыру Соғыс конфигурациясы бар Maven немесе құрастыру Қабаттамасы бар Maven.

Camunda Tomcat дистрибутивін іске қосу

Тағы бір нұсқа - жай ғана Camunda Tomcat дистрибутивін жүктеп алу, оны ашу және іске қосу. Мұны істеу үшін сізге тек компьютерде орнатылған Java Runtime Environment (JRE) қажет. Бұл оңай болуы мүмкін осы жерден жүктеп алыңыз.

Оңай REST негізіндегі оркестр мен жұмыс процесі механизмі үшін Camunda пайдалану (Java жоқ)

Дерекқорды өзгерту немесе басқа кез келген әрекетті орындау үшін Tomcat сияқты конфигурациялау қажет құжаттамада сипатталған. Мен Tomcat күрделі болып көрінуі мүмкін екенін білемін, бірақ бұл өте қарапайым. Google-да сізге қажет болуы мүмкін барлық сұрақтарға жауаптар бар.

Tomcat көмегімен Camunda бағдарламасын іске қосу

Соңғы балама - Tomcat-ті өзіңіз конфигурациялау және оған Camunda орнату, орнату сипаттамасынан кейін. Бұл сізге Tomcat қолданбасының кез келген нұсқасын пайдалануға немесе, мысалы, оны Windows қызметі ретінде орнатуға мүмкіндік береді.

Камунданың өндіріске енгізілуі

Әдетте бұл Камунданы іске қосу үшін соңғы орнатуды қажет етеді. Камундада мұны егжей-тегжейлі сипаттайтын нұсқаулар бар, бірақ мен бұл мақалада оларға тоқталмаймын - мен бір ғана мысал келтіремін: таратудың REST API әдепкі бойынша аутентификация үшін конфигурацияланбаған. Мұны өзгерткіңіз келуі мүмкін.

Қорытындылау

Сіз байқаған боларсыз, Camunda-мен жұмысты бастау сіз қолданатын тілге қарамастан өте оңай. Ең бастысы, барлық байланыс REST API арқылы жүзеге асырылады. Орнату да өте қарапайым, әсіресе Docker пайдалану кезінде.

Ақпарат көзі: www.habr.com

пікір қалдыру