හෙලෝ, හබ්ර්! ලිපියේ පරිවර්තනයක් මම ඔබේ අවධානයට ඉදිරිපත් කරමි බර්න්ඩ් රුකර් විසිනි.
07.07.2020/XNUMX/XNUMX, පරිවර්තනය බර්න්ඩ් රුකර්

මම බොහෝ විට ජාවා නොවන පුද්ගලයින් සමඟ ක්ෂුද්ර සේවා ගෘහ නිර්මාණ ශිල්පය ගැන සාකච්ඡා කරමි: C# සංවර්ධකයින්, Node.JS/JavaScript සංවර්ධකයින්, හෝ Golang රසිකයින්. ක්ෂුද්ර සේවා ගෘහ නිර්මාණ ශිල්පයක වාද්ය වෘන්ද යාන්ත්රණයක් අවශ්ය බව හෝ කාර්ය ප්රවාහය විධිමත් කිරීමට සහ ඇණවුම් කිරීමේ හැකියාව ලබා ගැනීමට, කල් ඉකුත්වීම්, සාගා සහ වන්දි ගනුදෙනු සඳහා අවශ්ය බව ඔවුන් සියල්ලන්ටම මුහුණ දී තිබේ.
සමඟ BPM වේදිකාව එවැනි කාර්යයන් සඳහා විශිෂ්ටයි. සංවර්ධක සුහදතාවය නිෂ්පාදනයේ ප්රධාන ලක්ෂණයකි. නමුත් ඔබ එහි ලියකියවිලි දෙස බැලුවහොත්, Camunda හි "මිත්රශීලීත්වය" ප්රධාන වශයෙන් ජාවා සංවර්ධකයින් ඉලක්ක කර ගෙන ඇති බවට හැඟීමක් ඔබට ඇති විය හැකිය. වේදිකාව ඔබේම කාර්යයන් සහ දිගු සම්බන්ධ කිරීම සඳහා බොහෝ විකල්ප සපයයි, නමුත් ඒ සියල්ල ජාවා වලින් සිදු කෙරේ. එය ඇත්තටමද?
නැත! ඇත්ත වශයෙන්ම, ඔබට කිසිදු ජාවා දැනුමක් නොමැතිව පහසුවෙන් Camunda ධාවනය කළ හැකි අතර ඔබ කැමති ඕනෑම භාෂාවකින් කේතය සඳහා ගෘහ නිර්මාණ ශිල්පය සැකසිය හැකිය. මෙම ලිපියෙන් අපි බලමු:
- මූලික ගෘහ නිර්මාණ ශිල්පය;
- REST API
- ජාවා හැර වෙනත් භාෂා සඳහා පවතින සේවාදායක පුස්තකාල පිළිබඳ උපදෙස්;
- උදාහරණයක් ලෙස C# සහ Node.JS භාවිතා කිරීම;
- Camunda සේවාදායකය ආරම්භ කිරීමට මාර්ග (Docker හෝ Tomcat).
ගෘහ නිර්මාණ ශිල්පය
Camunda ලියා ඇත්තේ ජාවා භාෂාවෙන් වන අතර ක්රියාත්මක වීමට Java Virtual Machine (JVM) අවශ්ය වේ. Camunda ඔබට කැමති ඕනෑම භාෂාවකින් ලිවීමට සහ Camunda සමඟ REST භාවිතා කිරීමට ඉඩ සලසන REST API සපයයි:

Camunda හි කාර්ය ප්රවාහයන් මූලික වශයෙන් XML ගොනුවක් වන BPMN හි අර්ථ දක්වා ඇත. එය සමඟ ආකෘතිගත කළ හැකිය .
පෙර-සාදන ලද Docker රූපයක් හරහා Camunda ධාවනය කිරීම
Camunda ධාවනය කිරීමට පහසුම ක්රමය වන්නේ Docker භාවිතා කිරීමයි. Camunda දියත් කිරීමට විකල්ප ක්රම මෙම ලිපියෙන් පසුව විස්තර කෙරේ.

මෙම අවස්ථාවේදී, සරලව ක්රියාත්මක කරන්න:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Вам не нужно волноваться о Linux, виртуальных машинах Java или Tomcats. Dockerfiles и основная документация (например, инструкция по подключению к нужным базам данных) доступны на .
ඔබට Camunda Enterprise Edition ධාවනය කිරීමට අවශ්ය නම් ඔබට පහසුවෙන් වෙනස් කළ හැක .
කෙසේ වෙතත්, Docker සමඟ Camunda ධාවනය කිරීමේ එක් අවාසියක් ඇත: ඔබට සෑම විටම නවතම නිවැරදි කිරීම් ඇතුළත් නොවන Tomcat අනුවාදයක් අවසන් වනු ඇත. මෙය විසඳා ගැනීමට, ඔබට මෙම උදාහරණයේ පෙන්වා ඇති පරිදි අපේක්ෂිත Tomcat බෙදාහැරීම මත පදනම්ව ඔබේම Docker රූපයක් නිර්මාණය කළ හැකිය, නැතහොත් පහත විස්තර කර ඇති විසඳුම් වලින් එකක් භාවිතා කරන්න.
ක්රියාවලි ආකෘතිය යෙදවීම
සම්භාව්ය චාරිකා වෙන්කරවා ගැනීමක් සඳහා Saga අච්චුව භාවිතයෙන් උදාහරණයක් බලමු, ඔබට පේළියක ක්රියා තුනක් ක්රියාරම්භ කිරීමට සහ පසුව අසාර්ථක වූ විට සාර්ථකව සම්පූර්ණ කළ ක්රියා සඳහා අලංකාර ලෙස වන්දි ගෙවීමට අවශ්ය වේ. BPMN ආකෘතියෙන් නියෝජනය වන අතර, එය මෙසේ දිස්වේ:

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

එබැවින් පළමුව ඔබ ක්රියාත්මක කළ යුතුය (පද්ධතිය පරිමාණය කිරීම සඳහා අනෙකුත් සේවකයින්ට එකවර කාර්යයන් ලැබිය හැකි නිසා):
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();
වැඩි විස්තර වෙබ් අඩවියෙන් සොයාගත හැකිය
Camunda දියත් කිරීමට විකල්ප මාර්ග
"Camunda standalone WAR" සහිත අභිරුචි ඩොකර් රූපය
Camunda වෙතින් පෙර-සාදන ලද Docker රූපයකට විකල්පයක් ලෙස, ඔබට Tomcat ඔබ විසින්ම සූදානම් කර ගත හැක (උදාහරණයක් ලෙස, නිල Docker Tomcat පින්තූර මත පදනම්ව) ඉන්පසු Camunda ඊනියා WAR ගොනු වලින් එකක් ලෙස එයට පිටපත් කරන්න.

ඔබට බොහෝ අමතර අවශ්යතා තිබේ නම් සහ ජාවා ගොඩනැගීමේ පරිසරයක් සැකසිය හැකි නම්, ඔබට Camunda Standalone war ද සැකසිය හැක. මෙම උදාහරණ වල මෙන් Maven බිල්ඩ් එකක් සකසන්න: ගොඩනැගීම හෝ එකලස් කිරීම .
Camunda Tomcat බෙදා හැරීම ආරම්භ කිරීම
තවත් විකල්පයක් වන්නේ Camunda Tomcat බෙදාහැරීම බාගත කර එය unzip කර එය ක්රියාත්මක කිරීමයි. මේ සඳහා අවශ්ය වන්නේ ඔබේ පරිගණකයේ ස්ථාපනය කර ඇති Java Runtime Environment (JRE) පමණි. එය පහසු විය හැක .

දත්ත සමුදාය වෙනස් කිරීමට හෝ වෙනත් ඕනෑම දෙයක් කිරීමට ඔබ Tomcat වැනි වින්යාසගත කළ යුතුය . මම දන්නවා Tomcat සංකීර්ණ බවක් පෙනෙන්නට ඇත, නමුත් එය ඇත්තෙන්ම ඉතා සරලයි. තවද ක්රියාවලියේදී ඔබට අවශ්ය විය හැකි සෑම දෙයකටම පිළිතුරු Google සතුව ඇත.
Tomcat භාවිතයෙන් Camunda ධාවනය කිරීම
අවසාන විකල්පය නම් Tomcat ඔබ විසින්ම සකසා Camunda එහි ස්ථාපනය කිරීමයි. . Это даст возможность использовать любую версию Tomcat, которую вы предпочитаете, или, например, установить ее в качестве службы Windows.
Camunda නිෂ්පාදනයට දියත් කිරීම
සාමාන්යයෙන්, මෙය ඔබට Camunda ධාවනය ලබා ගැනීම සඳහා අවසාන සැකසුම කිරීමට අවශ්ය වනු ඇත. Camunda සතුව මෙය ඉතා විස්තරාත්මකව විස්තර කරන මාර්ගෝපදේශ ඇත, නමුත් මම ඒවා මෙම ලිපියෙන් ස්පර්ශ නොකරමි - මම එක් උදාහරණයක් දෙන්නම්: බෙදාහැරීමේ REST API පෙරනිමියෙන් සත්යාපනය සඳහා වින්යාස කර නොමැත. ඔබට මෙය වෙනස් කිරීමට අවශ්ය විය හැක.
සාරාංශගත කිරීම
ඔබට පෙනෙන පරිදි, ඔබ භාවිතා කරන භාෂාව කුමක් වුවත්, Camunda සමඟ ආරම්භ කිරීම ඉතා පහසුය. ප්රධාන කරුණ නම් සියලුම අන්තර්ක්රියා REST API හරහා සිදු කිරීමයි. විශේෂයෙන් Docker භාවිතා කරන විට ස්ථාපනය ඉතා පහසුයි.
මූලාශ්රය: www.habr.com
