REST සහ Workflow Engine මත පදනම්ව පහසු වාද්‍ය වෘන්දයක් සඳහා Camunda භාවිතා කිරීම (ජාවා නොමැත)

හෙලෝ, හබ්ර්! ලිපියේ පරිවර්තනයක් මම ඔබේ අවධානයට ඉදිරිපත් කරමි "පහසුවෙන් භාවිතා කළ හැකි REST-පාදක වාද්‍ය වෘන්දය සහ වැඩ ප්‍රවාහ එන්ජිමක් ලෙස Camunda භාවිතා කරන්න (ජාවා ස්පර්ශ නොකර)" බර්න්ඩ් රුකර් විසිනි.

07.07.2020/XNUMX/XNUMX, පරිවර්තනය ලිපි බර්න්ඩ් රුකර්

REST සහ Workflow Engine මත පදනම්ව පහසු වාද්‍ය වෘන්දයක් සඳහා Camunda භාවිතා කිරීම (ජාවා නොමැත)

මම බොහෝ විට ජාවා නොවන පුද්ගලයින් සමඟ ක්ෂුද්‍ර සේවා ගෘහ නිර්මාණ ශිල්පය ගැන සාකච්ඡා කරමි: C# සංවර්ධකයින්, Node.JS/JavaScript සංවර්ධකයින්, හෝ Golang රසිකයින්. ක්ෂුද්‍ර සේවා ගෘහ නිර්මාණ ශිල්පයක වාද්‍ය වෘන්ද යාන්ත්‍රණයක් අවශ්‍ය බව හෝ කාර්ය ප්‍රවාහය විධිමත් කිරීමට සහ ඇණවුම් කිරීමේ හැකියාව ලබා ගැනීමට, කල් ඉකුත්වීම්, සාගා සහ වන්දි ගනුදෙනු සඳහා අවශ්‍ය බව ඔවුන් සියල්ලන්ටම මුහුණ දී තිබේ.

සමඟ BPM වේදිකාව Camunda වෙතින් විවෘත මූලාශ්‍රය එවැනි කාර්යයන් සඳහා විශිෂ්ටයි. සංවර්ධක සුහදතාවය නිෂ්පාදනයේ ප්‍රධාන ලක්ෂණයකි. නමුත් ඔබ එහි ලියකියවිලි දෙස බැලුවහොත්, Camunda හි "මිත්‍රශීලීත්වය" ප්‍රධාන වශයෙන් ජාවා සංවර්ධකයින් ඉලක්ක කර ගෙන ඇති බවට හැඟීමක් ඔබට ඇති විය හැකිය. වේදිකාව ඔබේම කාර්යයන් සහ දිගු සම්බන්ධ කිරීම සඳහා බොහෝ විකල්ප සපයයි, නමුත් ඒ සියල්ල ජාවා වලින් සිදු කෙරේ. එය ඇත්තටමද?

නැත! ඇත්ත වශයෙන්ම, ඔබට කිසිදු ජාවා දැනුමක් නොමැතිව පහසුවෙන් Camunda ධාවනය කළ හැකි අතර ඔබ කැමති ඕනෑම භාෂාවකින් කේතය සඳහා ගෘහ නිර්මාණ ශිල්පය සැකසිය හැකිය. මෙම ලිපියෙන් අපි බලමු:

  • මූලික ගෘහ නිර්මාණ ශිල්පය;
  • REST API
  • ජාවා හැර වෙනත් භාෂා සඳහා පවතින සේවාදායක පුස්තකාල පිළිබඳ උපදෙස්;
  • උදාහරණයක් ලෙස C# සහ Node.JS භාවිතා කිරීම;
  • Camunda සේවාදායකය ආරම්භ කිරීමට මාර්ග (Docker හෝ Tomcat).

ගෘහ නිර්මාණ ශිල්පය

Camunda ලියා ඇත්තේ ජාවා භාෂාවෙන් වන අතර ක්‍රියාත්මක වීමට Java Virtual Machine (JVM) අවශ්‍ය වේ. Camunda ඔබට කැමති ඕනෑම භාෂාවකින් ලිවීමට සහ Camunda සමඟ REST භාවිතා කිරීමට ඉඩ සලසන REST API සපයයි:

REST සහ Workflow Engine මත පදනම්ව පහසු වාද්‍ය වෘන්දයක් සඳහා Camunda භාවිතා කිරීම (ජාවා නොමැත)

Camunda හි කාර්ය ප්‍රවාහයන් මූලික වශයෙන් XML ගොනුවක් වන BPMN හි අර්ථ දක්වා ඇත. එය සමඟ ආකෘතිගත කළ හැකිය Camunda Modeler.

පෙර-සාදන ලද Docker රූපයක් හරහා Camunda ධාවනය කිරීම

Camunda ධාවනය කිරීමට පහසුම ක්රමය වන්නේ Docker භාවිතා කිරීමයි. Camunda දියත් කිරීමට විකල්ප ක්‍රම මෙම ලිපියෙන් පසුව විස්තර කෙරේ.

REST සහ Workflow Engine මත පදනම්ව පහසු වාද්‍ය වෘන්දයක් සඳහා Camunda භාවිතා කිරීම (ජාවා නොමැත)

මෙම අවස්ථාවේදී, සරලව ක්රියාත්මක කරන්න:

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

ඔබ Linux, JVM හෝ Tomcats ගැන කරදර විය යුතු නැත. Dockerfiles සහ මූලික ලියකියවිලි (උදාහරණයක් ලෙස, අවශ්ය දත්ත සමුදායන් වෙත සම්බන්ධ කිරීම සඳහා උපදෙස්) ලබා ගත හැකිය Github.

ඔබට Camunda Enterprise Edition ධාවනය කිරීමට අවශ්‍ය නම් ඔබට පහසුවෙන් වෙනස් කළ හැක ඩොකර්ෆයිල්.

කෙසේ වෙතත්, Docker සමඟ Camunda ධාවනය කිරීමේ එක් අවාසියක් ඇත: ඔබට සෑම විටම නවතම නිවැරදි කිරීම් ඇතුළත් නොවන Tomcat අනුවාදයක් අවසන් වනු ඇත. මෙය විසඳා ගැනීමට, ඔබට මෙම උදාහරණයේ පෙන්වා ඇති පරිදි අපේක්ෂිත Tomcat බෙදාහැරීම මත පදනම්ව ඔබේම Docker රූපයක් නිර්මාණය කළ හැකිය, නැතහොත් පහත විස්තර කර ඇති විසඳුම් වලින් එකක් භාවිතා කරන්න.

ක්‍රියාවලි ආකෘතිය යෙදවීම

සම්භාව්‍ය චාරිකා වෙන්කරවා ගැනීමක් සඳහා Saga අච්චුව භාවිතයෙන් උදාහරණයක් බලමු, ඔබට පේළියක ක්‍රියා තුනක් ක්‍රියාරම්භ කිරීමට සහ පසුව අසාර්ථක වූ විට සාර්ථකව සම්පූර්ණ කළ ක්‍රියා සඳහා අලංකාර ලෙස වන්දි ගෙවීමට අවශ්‍ය වේ. BPMN ආකෘතියෙන් නියෝජනය වන අතර, එය මෙසේ දිස්වේ:

REST සහ Workflow Engine මත පදනම්ව පහසු වාද්‍ය වෘන්දයක් සඳහා Camunda භාවිතා කිරීම (ජාවා නොමැත)

දැන් ඔබට භාවිතා කළ හැකිය ක්‍රියාවලි ආකෘති යෙදවීම සඳහා 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 මෝටර් රථයක් වෙන්කරවා ගැනීම වැනි ක්රියා පටිපාටි අමතන්නේ කෙසේද? Camunda හට සමහර බිල්ට්-ඉන් භාවිතයෙන් වහාම සේවා ඇමතීමට පමණක් (Push-Principle) නොහැක සම්බන්ධක, නමුත් වැඩ අයිතම යම් ආකාරයක බිල්ට් අනුපිළිවෙලකට දමන්න. එවිට සේවකයාට REST හරහා වැඩ අයිතම ගෙන ඒමට, කාර්යය ඉටු කිරීමට සහ Camunda සම්පූර්ණ කරන ලෙස පැවසිය හැක (Pulll-Principle).

REST සහ Workflow Engine මත පදනම්ව පහසු වාද්‍ය වෘන්දයක් සඳහා Camunda භාවිතා කිරීම (ජාවා නොමැත)

එබැවින් පළමුව ඔබ ක්රියාත්මක කළ යුතුය 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

එහෙනම් Camunda ඒක කියන්න සේවකයා වැඩ නිම කළේය (පළමු ඉල්ලීමේදී ලැබුණු බාහිර කාර්ය හැඳුනුම්පත ඇතුළත් කළ යුතු බව සලකන්න):

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

එච්චරයි - ඔබට තවමත් ජාවා අවශ්‍ය වී නැත, හරිද? ආරම්භ කිරීමට එය ප්‍රමාණවත්ය!

සේවාලාභී පුස්තකාල

REST API ඇමතීම ඕනෑම ක්‍රමලේඛන භාෂාවකින් පහසුය. JavaScript වලදී, මෙය JQuery භාවිතයෙන් සහ C# හි System.Net.Http සහ Newtonsoft.Json භාවිතයෙන් පහසුවෙන් සිදු කෙරේ. නමුත් මේ සඳහා කාලය ගතවනු ඇත. එබැවින් ඔබට සේවාදායක පුස්තකාලයක් භාවිතා කළ හැකිය.

දැනට සූදානම් කළ සේවාදායක පුස්තකාල කිහිපයක් තිබේ:

  • JavaScript: සබැඳිය. Camunda විසින් සහාය දක්වන ලදී;
  • ජාවා: සබැඳිය. Camunda විසින් සහාය දක්වන ලදී;
  • සී #:සබැඳිය и සබැඳිය. මෙම ව්‍යාපෘති දෙකම අතරමැදි තත්වයක පවතින අතර ප්‍රායෝගිකව අක්‍රියව පවතී, නමුත් හොඳ ආරම්භක ලක්ෂ්‍යයක් ලෙස සේවය කළ හැක;
  • 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 දියත් කිරීමට විකල්ප මාර්ග

"Camunda standalone WAR" සහිත අභිරුචි ඩොකර් රූපය

Camunda වෙතින් පෙර-සාදන ලද Docker රූපයකට විකල්පයක් ලෙස, ඔබට Tomcat ඔබ විසින්ම සූදානම් කර ගත හැක (උදාහරණයක් ලෙස, නිල Docker Tomcat පින්තූර මත පදනම්ව) ඉන්පසු Camunda ඊනියා WAR ගොනු වලින් එකක් ලෙස එයට පිටපත් කරන්න.

REST සහ Workflow Engine මත පදනම්ව පහසු වාද්‍ය වෘන්දයක් සඳහා Camunda භාවිතා කිරීම (ජාවා නොමැත)

ඔබට බොහෝ අමතර අවශ්‍යතා තිබේ නම් සහ ජාවා ගොඩනැගීමේ පරිසරයක් සැකසිය හැකි නම්, ඔබට Camunda Standalone war ද සැකසිය හැක. මෙම උදාහරණ වල මෙන් Maven බිල්ඩ් එකක් සකසන්න: ගොඩනැගීම මාවන් යුධ වින්‍යාසය සමඟ හෝ එකලස් කිරීම ආවරණ සහිත Maven.

Camunda Tomcat බෙදා හැරීම ආරම්භ කිරීම

තවත් විකල්පයක් වන්නේ Camunda Tomcat බෙදාහැරීම බාගත කර එය unzip කර එය ක්රියාත්මක කිරීමයි. මේ සඳහා අවශ්‍ය වන්නේ ඔබේ පරිගණකයේ ස්ථාපනය කර ඇති Java Runtime Environment (JRE) පමණි. එය පහසු විය හැක මෙතනින් බාගන්න.

REST සහ Workflow Engine මත පදනම්ව පහසු වාද්‍ය වෘන්දයක් සඳහා Camunda භාවිතා කිරීම (ජාවා නොමැත)

දත්ත සමුදාය වෙනස් කිරීමට හෝ වෙනත් ඕනෑම දෙයක් කිරීමට ඔබ Tomcat වැනි වින්‍යාසගත කළ යුතුය ලේඛනවල විස්තර කර ඇත. මම දන්නවා Tomcat සංකීර්ණ බවක් පෙනෙන්නට ඇත, නමුත් එය ඇත්තෙන්ම ඉතා සරලයි. තවද ක්‍රියාවලියේදී ඔබට අවශ්‍ය විය හැකි සෑම දෙයකටම පිළිතුරු Google සතුව ඇත.

Tomcat භාවිතයෙන් Camunda ධාවනය කිරීම

අවසාන විකල්පය නම් Tomcat ඔබ විසින්ම සකසා Camunda එහි ස්ථාපනය කිරීමයි. ස්ථාපන විස්තරය අනුගමනය කරමින්. මෙය ඔබට ඔබ කැමති Tomcat අනුවාදය භාවිතා කිරීමට විකල්පය ලබා දෙනු ඇත, නැතහොත් උදාහරණයක් ලෙස එය Windows සේවාවක් ලෙස ස්ථාපනය කරන්න.

Camunda නිෂ්පාදනයට දියත් කිරීම

සාමාන්‍යයෙන්, මෙය ඔබට Camunda ධාවනය ලබා ගැනීම සඳහා අවසාන සැකසුම කිරීමට අවශ්‍ය වනු ඇත. Camunda සතුව මෙය ඉතා විස්තරාත්මකව විස්තර කරන මාර්ගෝපදේශ ඇත, නමුත් මම ඒවා මෙම ලිපියෙන් ස්පර්ශ නොකරමි - මම එක් උදාහරණයක් දෙන්නම්: බෙදාහැරීමේ REST API පෙරනිමියෙන් සත්‍යාපනය සඳහා වින්‍යාස කර නොමැත. ඔබට මෙය වෙනස් කිරීමට අවශ්‍ය විය හැක.

සාරාංශගත කිරීම

ඔබට පෙනෙන පරිදි, ඔබ භාවිතා කරන භාෂාව කුමක් වුවත්, Camunda සමඟ ආරම්භ කිරීම ඉතා පහසුය. ප්‍රධාන කරුණ නම් සියලුම අන්තර්ක්‍රියා REST API හරහා සිදු කිරීමයි. විශේෂයෙන් Docker භාවිතා කරන විට ස්ථාපනය ඉතා පහසුයි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න