හෙලෝ, හබ්ර්! ලිපියේ පරිවර්තනයක් මම ඔබේ අවධානයට ඉදිරිපත් කරමි
07.07.2020/XNUMX/XNUMX, පරිවර්තනය
මම බොහෝ විට ජාවා නොවන පුද්ගලයින් සමඟ ක්ෂුද්ර සේවා ගෘහ නිර්මාණ ශිල්පය ගැන සාකච්ඡා කරමි: C# සංවර්ධකයින්, Node.JS/JavaScript සංවර්ධකයින්, හෝ Golang රසිකයින්. ක්ෂුද්ර සේවා ගෘහ නිර්මාණ ශිල්පයක වාද්ය වෘන්ද යාන්ත්රණයක් අවශ්ය බව හෝ කාර්ය ප්රවාහය විධිමත් කිරීමට සහ ඇණවුම් කිරීමේ හැකියාව ලබා ගැනීමට, කල් ඉකුත්වීම්, සාගා සහ වන්දි ගනුදෙනු සඳහා අවශ්ය බව ඔවුන් සියල්ලන්ටම මුහුණ දී තිබේ.
සමඟ BPM වේදිකාව
නැත! ඇත්ත වශයෙන්ම, ඔබට කිසිදු ජාවා දැනුමක් නොමැතිව පහසුවෙන් 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, JVM හෝ Tomcats ගැන කරදර විය යුතු නැත. Dockerfiles සහ මූලික ලියකියවිලි (උදාහරණයක් ලෙස, අවශ්ය දත්ත සමුදායන් වෙත සම්බන්ධ කිරීම සඳහා උපදෙස්) ලබා ගත හැකිය
ඔබට 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
ඊළඟ රසවත් ප්රශ්නය වන්නේ: Camunda මෝටර් රථයක් වෙන්කරවා ගැනීම වැනි ක්රියා පටිපාටි අමතන්නේ කෙසේද? Camunda හට සමහර බිල්ට්-ඉන් භාවිතයෙන් වහාම සේවා ඇමතීමට පමණක් (Push-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 භාවිතයෙන් Camunda ධාවනය කිරීම
අවසාන විකල්පය නම් Tomcat ඔබ විසින්ම සකසා Camunda එහි ස්ථාපනය කිරීමයි.
Camunda නිෂ්පාදනයට දියත් කිරීම
සාමාන්යයෙන්, මෙය ඔබට Camunda ධාවනය ලබා ගැනීම සඳහා අවසාන සැකසුම කිරීමට අවශ්ය වනු ඇත. Camunda සතුව මෙය ඉතා විස්තරාත්මකව විස්තර කරන මාර්ගෝපදේශ ඇත, නමුත් මම ඒවා මෙම ලිපියෙන් ස්පර්ශ නොකරමි - මම එක් උදාහරණයක් දෙන්නම්: බෙදාහැරීමේ REST API පෙරනිමියෙන් සත්යාපනය සඳහා වින්යාස කර නොමැත. ඔබට මෙය වෙනස් කිරීමට අවශ්ය විය හැක.
සාරාංශගත කිරීම
ඔබට පෙනෙන පරිදි, ඔබ භාවිතා කරන භාෂාව කුමක් වුවත්, Camunda සමඟ ආරම්භ කිරීම ඉතා පහසුය. ප්රධාන කරුණ නම් සියලුම අන්තර්ක්රියා REST API හරහා සිදු කිරීමයි. විශේෂයෙන් Docker භාවිතා කරන විට ස්ථාපනය ඉතා පහසුයි.
මූලාශ්රය: www.habr.com