Utilisation de Camunda pour une orchestration pratique basée sur REST et Workflow Engine (sans Java)

Bonjour, Habr! Je présente à votre attention la traduction de l'article "Utiliser Camunda comme moteur d'orchestration et de flux de travail REST facile à utiliser (sans toucher à Java)" de Bernd Rücker.



07.07.2020, traduction de l' article de Bernd Rücker





Utilisation de Camunda pour une orchestration pratique



, 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:



Utilisation de Camunda pour une orchestration pratique



Camunda BPMN, XML-. Camunda Modeler.



Camunda Docker



Camunda — Docker. Camunda .



Utilisation de Camunda pour une orchestration pratique



:



  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 :



Utilisation de Camunda pour une orchestration pratique



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).



Utilisation de Camunda pour une orchestration pratique



, 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-.



Utilisation de Camunda pour une orchestration pratique



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



Camunda Tomcat



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



Utilisation de Camunda pour une orchestration pratique



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



Camunda Tomcat



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



Camunda



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





Comme vous l'avez peut-être remarqué, la prise en main de Camunda est très simple, quelle que soit la langue que vous utilisez. Le point clé est que toutes les communications se font via l'API REST. L'installation est également assez facile, en particulier lors de l'utilisation de Docker.




All Articles