استخدام Camunda للتنسيق المريح بناءً على REST ومحرك سير العمل (بدون Java)

مرحبا يا هبر! أقدم انتباهكم إلى ترجمة مقالة "استخدام Camunda كمحرك سهل وسهل الاستخدام يستند إلى REST (بدون لمس Java)" بقلم بيرند روكر.



07.07.2020 ، ترجمة المقال بقلم بيرند روكر





باستخدام Camunda لتنظيم ملائم



, Java: C#, Node.JS/JavaScript Golang. , , -, Saga .



BPM- Camunda . — . , , «» Camunda Java-. , Java. ?



! , Camunda - Java , . :



  • ;
  • REST API;
  • , Java;
  • C # Node.JS;
  • Camunda (Docker Tomcat).




Camunda Java Java (JVM). Camunda REST API, , , REST Camunda:



باستخدام Camunda لتنظيم ملائم



Camunda BPMN, XML-. Camunda Modeler.



Camunda Docker



Camunda — Docker. Camunda .



باستخدام Camunda لتنظيم ملائم



:



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


Linux, Java Tomcats. Dockerfiles (, ) Github.



Camunda Enterprise Edition, Dockerfile.



Camunda Docker : Tomcat, . - , Docker- Tomcat, , , .





, Saga , . BPMN :



باستخدام Camunda لتنظيم ملائم



REST API . , trip.bpmn Camunda 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 "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), , . worker REST, Camunda (Pull-Principle).



باستخدام Camunda لتنظيم ملائم



, fetchAndLock ( worker ):



  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, worker ( , external task, ):



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


— Java, ? !





REST API . JavaScript JQuery, C# — System.Net.Http Newtonsoft.Json. . - .



:



  • JavaScript: . Camunda;
  • Java: . Camunda;
  • C#: . , ;
  • PHP: — API , , .

JavaScript Java, Camunda. , REST API Camunda. , , , REST API Camunda. .



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



Docker «Camunda standalone WAR»



Docker Camunda Tomcat (, Docker Tomcat), Camunda WAR-.



باستخدام Camunda لتنظيم ملائم



Java, Camunda Standalone war. Maven : Maven war Maven Overlay.



Camunda Tomcat



— Camunda Tomcat, . Java Runtime Environment (JRE), . .



باستخدام Camunda لتنظيم ملائم



- , Tomcat, . , Tomcat , . Google , .



Camunda Tomcat



— Tomcat Camunda, . Tomcat, , , , Windows.



Camunda



, - Camunda. Camunda , , — : REST API . , .





كما لاحظت ، فإن بدء استخدام Camunda سهل للغاية ، بغض النظر عن اللغة التي تستخدمها. النقطة الأساسية هي أن جميع الاتصالات تتم من خلال REST API. التثبيت سهل جدًا أيضًا ، خاصة عند استخدام Docker.




All Articles