በ REST እና Workflow Engine (ጃቫ የለም) ላይ ተመስርተው ለቀላል ኦርኬስትራ ካሙንዳ መጠቀም

ሃይ ሀብር! የጽሁፉን ትርጉም ለእርስዎ ትኩረት አቀርባለሁ። "Camunda ለአጠቃቀም ቀላል በሆነ REST ላይ የተመሰረተ ኦርኬስትራ እና የስራ ፍሰት ሞተር (ጃቫን ሳትነኩ) ተጠቀም" በበርንድ Rücker.

07.07.2020/XNUMX/XNUMX፣ ትርጉም መጣጥፎች በርንድ ራከር

በ REST እና Workflow Engine (ጃቫ የለም) ላይ ተመስርተው ለቀላል ኦርኬስትራ ካሙንዳ መጠቀም

ብዙ ጊዜ ስለ ማይክሮ ሰርቪስ አርክቴክቸር ከጃቫ ካልሆኑ ሰዎች ጋር እወያይበታለሁ፡ C# ገንቢዎች፣ Node.JS/JavaScript ገንቢዎች ወይም Golang aficionados። ሁሉም በማይክሮ ሰርቪስ አርክቴክቸር ውስጥ የኦርኬስትራ ዘዴ እንደሚያስፈልጋቸው ወይም የስራ ሂደቱን ለማቀላጠፍ እና ለማዘዝ ፣የጊዜ ማብቂያዎችን ፣የሳጋን እና ግብይቶችን የማካካሻ ችሎታን ለማግኘት የሚያስችል መሳሪያ ብቻ ነው የሚያጋጥማቸው።

BPM መድረክ ከ ጋር ክፍት ምንጭ ከ Camunda ለእንደዚህ አይነት ስራዎች በጣም ጥሩ. የገንቢ ወዳጃዊነት ከምርቱ ዋና ዋና ባህሪያት አንዱ ነው። ነገር ግን ሰነዶቹን ከተመለከቱ፣ የካሙንዳ "ወዳጅነት" በዋናነት በጃቫ ገንቢዎች ላይ ያነጣጠረ እንደሆነ ሊሰማዎት ይችላል። የመሳሪያ ስርዓቱ የእራስዎን ተግባራት እና ቅጥያዎች ለማገናኘት ብዙ አማራጮችን ይሰጣል, ነገር ግን ሁሉም በጃቫ ውስጥ ነው. እውነት ነው?

አይ! እንደውም ካሙንዳ ያለ ምንም የጃቫ እውቀት በቀላሉ ማስኬድ እና በመረጡት ቋንቋ ለኮድ አርክቴክቸር ማዘጋጀት ይችላሉ። በዚህ ጽሑፍ ውስጥ እንመለከታለን-

  • መሰረታዊ አርክቴክቸር;
  • REST ኤፒአይ
  • ከጃቫ ውጭ ላሉት ቋንቋዎች ባሉ የደንበኛ ቤተ-መጻሕፍት ላይ ምክር;
  • ምሳሌ C # እና Node.JS በመጠቀም;
  • የካሙንዳ አገልጋይ (Docker ወይም Tomcat) ለመጀመር መንገዶች።

ሥነ ሕንፃ

ካሙንዳ በጃቫ የተፃፈ ሲሆን ለማሄድ የጃቫ ቨርቹዋል ማሽን (JVM) ያስፈልገዋል። Camunda በፈለጉት ቋንቋ እንዲጽፉ እና RESTን ከCamunda ጋር ለመጠቀም የሚያስችል የREST API ያቀርባል፡-

በ REST እና Workflow Engine (ጃቫ የለም) ላይ ተመስርተው ለቀላል ኦርኬስትራ ካሙንዳ መጠቀም

በካሙንዳ ውስጥ ያሉ የስራ ፍሰቶች በ BPMN ውስጥ ተገልጸዋል፣ እሱም በመሠረቱ የኤክስኤምኤል ፋይል ነው። ጋር ሞዴል ሊሆን ይችላል ካሙንዳ ሞዴል.

አስቀድሞ በተሰራ Docker ምስል በኩል ካሙንዳ በማሄድ ላይ

ካሙንዳ ለማሄድ ቀላሉ መንገድ ዶከርን መጠቀም ነው። Camunda ን ለማስጀመር አማራጭ መንገዶች በዚህ ጽሑፍ ውስጥ በኋላ ላይ ተብራርተዋል።

በ REST እና Workflow Engine (ጃቫ የለም) ላይ ተመስርተው ለቀላል ኦርኬስትራ ካሙንዳ መጠቀም

በዚህ አጋጣሚ በቀላሉ ያሂዱ፡-

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

ስለ ሊኑክስ፣ JVMs ወይም Tomcats መጨነቅ አያስፈልገዎትም። ዶከርፋይሎች እና መሰረታዊ ሰነዶች (ለምሳሌ ከሚፈለጉት የውሂብ ጎታዎች ጋር ለመገናኘት መመሪያዎች) በ ላይ ይገኛሉ የፊልሙ.

ካሙንዳ ኢንተርፕራይዝ እትም ማሄድ ከፈለጉ በቀላሉ መቀየር ይችላሉ። Dockerfile.

ሆኖም ካሙንዳ ከዶከር ጋር መሮጥ አንድ አሉታዊ ጎን አለው፡ ሁልጊዜም የቅርብ ጊዜ ጥገናዎችን የማያካትት የ Tomcat እትም ታገኛለህ። በዚህ ዙሪያ ለመስራት, በዚህ ምሳሌ ላይ እንደሚታየው በሚፈለገው የ Tomcat ስርጭት ላይ በመመስረት የራስዎን Docker ምስል መፍጠር ይችላሉ ወይም ከታች ከተገለጹት መፍትሄዎች ውስጥ አንዱን ይጠቀሙ.

የሂደት ሞዴል መዘርጋት

በተከታታይ ሶስት ድርጊቶችን ለመቀስቀስ እና በኋላ ውድቀት ቢከሰት በተሳካ ሁኔታ የተጠናቀቁ ድርጊቶችን ለማካካስ ለሚፈልጉ የSaga አብነት ለተለመደ የጉዞ ቦታ ማስያዣ ምሳሌን እንይ። በBPMN መልክ የተወከለው ይህን ይመስላል፡-

በ REST እና Workflow Engine (ጃቫ የለም) ላይ ተመስርተው ለቀላል ኦርኬስትራ ካሙንዳ መጠቀም

አሁን መጠቀም ይችላሉ። REST API ለሂደት ሞዴል ማሰማራት. እንደ trip.bpmn አስቀምጠው እና ካሙንዳ በ Docker አሂድ እንበል በ 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

የሚቀጥለው አስገራሚ ጥያቄ፡ ካሙንዳ እንደ መኪና ማስያዝ ያሉ ሂደቶችን እንዴት ይጠራል? ካሙንዳ አንዳንድ አብሮ የተሰሩትን በመጠቀም ወዲያውኑ አገልግሎቶችን መደወል ብቻ አይችልም (ፑሽ-ፕሪንሲፕል) ማገናኛዎች, ነገር ግን የስራ እቃዎችን አብሮ በተሰራ ቅደም ተከተል ውስጥ ያስቀምጡ. ሰራተኛው በ REST በኩል የስራ እቃዎችን ማምጣት፣ ስራውን ማከናወን እና ካሙንዳ እንዲያጠናቅቅ መንገር ይችላል (ፑል-ፕሪንሲፕል)።

በ REST እና Workflow Engine (ጃቫ የለም) ላይ ተመስርተው ለቀላል ኦርኬስትራ ካሙንዳ መጠቀም

ስለዚህ በመጀመሪያ መፈጸም ያስፈልግዎታል ማምጣት AndLock (ሌሎች ሰራተኞች ስርዓቱን ለመለካት በአንድ ጊዜ ስራዎችን ሊቀበሉ ስለሚችሉ)

  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();

ተጨማሪ መረጃ በድር ጣቢያው ላይ ሊገኝ ይችላል github.com

Camunda ን ለመጀመር አማራጭ መንገዶች

ብጁ ዶከር ምስል ከ"Camunda standalone WAR" ጋር

ከካሚንዳ ቀድሞ ከተሰራው የዶከር ምስል እንደ አማራጭ ቶምካትን እራስዎ ማዘጋጀት ይችላሉ (ለምሳሌ ፣ በኦፊሴላዊው Docker Tomcat ምስሎች ላይ በመመስረት) እና ከዚያ ካሙንዳ የ WAR ፋይሎች ከሚባሉት ውስጥ እንደ አንዱ መገልበጥ ይችላሉ።

በ REST እና Workflow Engine (ጃቫ የለም) ላይ ተመስርተው ለቀላል ኦርኬስትራ ካሙንዳ መጠቀም

ብዙ ተጨማሪ መስፈርቶች ካሎት እና የጃቫ ግንባታ አካባቢን ማቀናበር ከቻሉ፣ እንዲሁም Camunda Standalone ጦርነትን ማዘጋጀት ይችላሉ። በእነዚህ ምሳሌዎች ውስጥ የማቨን ግንባታን ያዘጋጁ፡ ግንባታ Maven ከጦርነት ውቅር ጋር ወይም ስብሰባ ማቨን ከተደራቢ ጋር.

የ Camunda Tomcat ስርጭትን በመጀመር ላይ

ሌላው አማራጭ የ Camunda Tomcat ስርጭትን በቀላሉ ማውረድ, መክፈት እና ማስኬድ ነው. ይሄ በኮምፒውተርዎ ላይ የተጫነውን የJava Runtime Environment (JRE) ብቻ ነው የሚፈልገው። በቀላሉ ሊሆን ይችላል ከዚህ አውርድ.

በ REST እና Workflow Engine (ጃቫ የለም) ላይ ተመስርተው ለቀላል ኦርኬስትራ ካሙንዳ መጠቀም

የውሂብ ጎታውን ለመለወጥ ወይም ሌላ ማንኛውንም ነገር ለማድረግ ቶምካትን እንደ ማዋቀር ያስፈልግዎታል በሰነድ ውስጥ ተገልጿል. Tomcat የተወሳሰበ ሊመስል እንደሚችል አውቃለሁ፣ ግን በእውነቱ በጣም ቀላል ነው። እና Google በሂደቱ ውስጥ ሊጠየቁ የሚችሉትን ሁሉንም መልሶች ያውቃል።

Tomcat ን በመጠቀም ካሙንዳ በማሄድ ላይ

የመጨረሻው አማራጭ Tomcat ን እራስዎ ማዋቀር እና ካሙንዳ ወደ እሱ መጫን ነው። የመጫኛ መግለጫውን ተከትሎ. ይህ የመረጡትን የቶምኬት ስሪት ለመጠቀም ወይም እንደ ዊንዶውስ አገልግሎት ለምሳሌ ለመጫን አማራጭ ይሰጥዎታል።

ካሙንዳ ወደ ምርት በመጀመር ላይ

ይህ አብዛኛው ጊዜ Camunda ን ለማስኬድ የተወሰነ የመጨረሻ ማዋቀር ያስፈልገዋል። በካሙንዳ ውስጥ ይህንን በዝርዝር የሚገልጹ መመሪያዎች አሉ ፣ ግን በዚህ ጽሑፍ ውስጥ አልገባም - አንድ ምሳሌ ብቻ እጠቅሳለሁ-የስርጭቱ REST API በነባሪነት ለማረጋገጫ አልተዋቀረም። ይህንን መለወጥ ይፈልጉ ይሆናል።

ማጠቃለል

እንደሚመለከቱት፣ የምትጠቀሙበት ቋንቋ ምንም ይሁን ምን፣ በCamunda መጀመር በጣም ቀላል ነው። ዋናው ነጥብ ሁሉም መስተጋብር የሚከናወነው በREST API ነው። በተለይ Docker ሲጠቀሙ መጫኑ በጣም ቀላል ነው።

ምንጭ: hab.com

አስተያየት ያክሉ