ሃይ ሀብር! የጽሁፉን ትርጉም ለእርስዎ ትኩረት አቀርባለሁ።
07.07.2020/XNUMX/XNUMX፣ ትርጉም
ብዙ ጊዜ ስለ ማይክሮ ሰርቪስ አርክቴክቸር ከጃቫ ካልሆኑ ሰዎች ጋር እወያይበታለሁ፡ C# ገንቢዎች፣ Node.JS/JavaScript ገንቢዎች ወይም Golang aficionados። ሁሉም በማይክሮ ሰርቪስ አርክቴክቸር ውስጥ የኦርኬስትራ ዘዴ እንደሚያስፈልጋቸው ወይም የስራ ሂደቱን ለማቀላጠፍ እና ለማዘዝ ፣የጊዜ ማብቂያዎችን ፣የሳጋን እና ግብይቶችን የማካካሻ ችሎታን ለማግኘት የሚያስችል መሳሪያ ብቻ ነው የሚያጋጥማቸው።
BPM መድረክ ከ ጋር
አይ! እንደውም ካሙንዳ ያለ ምንም የጃቫ እውቀት በቀላሉ ማስኬድ እና በመረጡት ቋንቋ ለኮድ አርክቴክቸር ማዘጋጀት ይችላሉ። በዚህ ጽሑፍ ውስጥ እንመለከታለን-
- መሰረታዊ አርክቴክቸር;
- REST ኤፒአይ
- ከጃቫ ውጭ ላሉት ቋንቋዎች ባሉ የደንበኛ ቤተ-መጻሕፍት ላይ ምክር;
- ምሳሌ C # እና Node.JS በመጠቀም;
- የካሙንዳ አገልጋይ (Docker ወይም Tomcat) ለመጀመር መንገዶች።
ሥነ ሕንፃ
ካሙንዳ በጃቫ የተፃፈ ሲሆን ለማሄድ የጃቫ ቨርቹዋል ማሽን (JVM) ያስፈልገዋል። Camunda በፈለጉት ቋንቋ እንዲጽፉ እና RESTን ከCamunda ጋር ለመጠቀም የሚያስችል የREST API ያቀርባል፡-
በካሙንዳ ውስጥ ያሉ የስራ ፍሰቶች በ BPMN ውስጥ ተገልጸዋል፣ እሱም በመሠረቱ የኤክስኤምኤል ፋይል ነው። ጋር ሞዴል ሊሆን ይችላል
አስቀድሞ በተሰራ Docker ምስል በኩል ካሙንዳ በማሄድ ላይ
ካሙንዳ ለማሄድ ቀላሉ መንገድ ዶከርን መጠቀም ነው። Camunda ን ለማስጀመር አማራጭ መንገዶች በዚህ ጽሑፍ ውስጥ በኋላ ላይ ተብራርተዋል።
በዚህ አጋጣሚ በቀላሉ ያሂዱ፡-
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
ስለ ሊኑክስ፣ JVMs ወይም Tomcats መጨነቅ አያስፈልገዎትም። ዶከርፋይሎች እና መሰረታዊ ሰነዶች (ለምሳሌ ከሚፈለጉት የውሂብ ጎታዎች ጋር ለመገናኘት መመሪያዎች) በ ላይ ይገኛሉ
ካሙንዳ ኢንተርፕራይዝ እትም ማሄድ ከፈለጉ በቀላሉ መቀየር ይችላሉ።
ሆኖም ካሙንዳ ከዶከር ጋር መሮጥ አንድ አሉታዊ ጎን አለው፡ ሁልጊዜም የቅርብ ጊዜ ጥገናዎችን የማያካትት የ 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
የሚቀጥለው አስገራሚ ጥያቄ፡ ካሙንዳ እንደ መኪና ማስያዝ ያሉ ሂደቶችን እንዴት ይጠራል? ካሙንዳ አንዳንድ አብሮ የተሰሩትን በመጠቀም ወዲያውኑ አገልግሎቶችን መደወል ብቻ አይችልም (ፑሽ-ፕሪንሲፕል)
ስለዚህ በመጀመሪያ መፈጸም ያስፈልግዎታል
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 መደወል ቀላል ነው። በጃቫ ስክሪፕት ይህ በተመቸ ሁኔታ JQueryን በመጠቀም እና በC # በSystem.Net.Http እና Newtonsoft.Json በመጠቀም ይከናወናል። ግን ይህ ጊዜ ይወስዳል. ስለዚህ አንዳንድ የደንበኛ ቤተ-መጽሐፍትን ብቻ መጠቀም ይችላሉ።
በአሁኑ ጊዜ፣ በርካታ ዝግጁ የሆኑ የደንበኛ ቤተ-ፍርግሞች ይገኛሉ፡-
- ጃቫስክሪፕት
ሳንቲም . በካሙንዳ የተደገፈ; - ጃቫ
ሳንቲም . በካሙንዳ የተደገፈ; - ሐ #:
ሳንቲም иሳንቲም . እነዚህ ሁለቱም ፕሮጀክቶች በመካከለኛ ሁኔታ ውስጥ ናቸው እና በተግባራዊ ሁኔታ ተኝተዋል, ግን እንደ ጥሩ መነሻ ሆነው ሊያገለግሉ ይችላሉ; - PHP:
ሳንቲም - በጣም የተሟላ አይደለም እና የቅርብ ጊዜውን የኤፒአይ ለውጦችን አያካትትም ፣ ግን እሱን የሚጠቀሙ ፕሮጀክቶችን አውቃለሁ።
ከጃቫ ስክሪፕት እና ጃቫ በስተቀር፣ የደንበኛ ቤተ-ፍርግሞች የራሱ የካሙንዳ ምርት አካል አይደሉም። ሁሉንም የCamunda REST API ባህሪያትን እንዲደግፉ አትጠብቅ። ቤተ-መጽሐፍት የተወሰነ ተግባር ስለሌለ ብቻ እዚያ የለም ማለት አይደለም፣ ሁልጊዜ የCamunda's 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" ጋር
ከካሚንዳ ቀድሞ ከተሰራው የዶከር ምስል እንደ አማራጭ ቶምካትን እራስዎ ማዘጋጀት ይችላሉ (ለምሳሌ ፣ በኦፊሴላዊው Docker Tomcat ምስሎች ላይ በመመስረት) እና ከዚያ ካሙንዳ የ WAR ፋይሎች ከሚባሉት ውስጥ እንደ አንዱ መገልበጥ ይችላሉ።
ብዙ ተጨማሪ መስፈርቶች ካሎት እና የጃቫ ግንባታ አካባቢን ማቀናበር ከቻሉ፣ እንዲሁም Camunda Standalone ጦርነትን ማዘጋጀት ይችላሉ። በእነዚህ ምሳሌዎች ውስጥ የማቨን ግንባታን ያዘጋጁ፡ ግንባታ
የ Camunda Tomcat ስርጭትን በመጀመር ላይ
ሌላው አማራጭ የ Camunda Tomcat ስርጭትን በቀላሉ ማውረድ, መክፈት እና ማስኬድ ነው. ይሄ በኮምፒውተርዎ ላይ የተጫነውን የJava Runtime Environment (JRE) ብቻ ነው የሚፈልገው። በቀላሉ ሊሆን ይችላል
የውሂብ ጎታውን ለመለወጥ ወይም ሌላ ማንኛውንም ነገር ለማድረግ ቶምካትን እንደ ማዋቀር ያስፈልግዎታል
Tomcat ን በመጠቀም ካሙንዳ በማሄድ ላይ
የመጨረሻው አማራጭ Tomcat ን እራስዎ ማዋቀር እና ካሙንዳ ወደ እሱ መጫን ነው።
ካሙንዳ ወደ ምርት በመጀመር ላይ
ይህ አብዛኛው ጊዜ Camunda ን ለማስኬድ የተወሰነ የመጨረሻ ማዋቀር ያስፈልገዋል። በካሙንዳ ውስጥ ይህንን በዝርዝር የሚገልጹ መመሪያዎች አሉ ፣ ግን በዚህ ጽሑፍ ውስጥ አልገባም - አንድ ምሳሌ ብቻ እጠቅሳለሁ-የስርጭቱ REST API በነባሪነት ለማረጋገጫ አልተዋቀረም። ይህንን መለወጥ ይፈልጉ ይሆናል።
ማጠቃለል
እንደሚመለከቱት፣ የምትጠቀሙበት ቋንቋ ምንም ይሁን ምን፣ በCamunda መጀመር በጣም ቀላል ነው። ዋናው ነጥብ ሁሉም መስተጋብር የሚከናወነው በREST API ነው። በተለይ Docker ሲጠቀሙ መጫኑ በጣም ቀላል ነው።
ምንጭ: hab.com