07.07.2020, traduction de l' article de Bernd Rücker
![Utilisation de Camunda pour une orchestration pratique](http://camunar.ru/paper/camunda_as_easy-to-use_orchestration_1.png)
, 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](http://camunar.ru/paper/camunda_as_easy-to-use_orchestration_2.png)
Camunda BPMN, XML-. Camunda Modeler.
Camunda Docker
Camunda — Docker. Camunda .
![Utilisation de Camunda pour une orchestration pratique](http://camunar.ru/paper/camunda_as_easy-to-use_orchestration_3.png)
:
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](http://camunar.ru/paper/camunda_as_easy-to-use_orchestration_4.png)
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
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](http://camunar.ru/paper/camunda_as_easy-to-use_orchestration_7.png)
, 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 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();
Camunda
Docker «Camunda standalone WAR»
Docker Camunda Tomcat (, Docker Tomcat), Camunda WAR-.
![Utilisation de Camunda pour une orchestration pratique](http://camunar.ru/paper/camunda_as_easy-to-use_orchestration_10.png)
Java, Camunda Standalone war. Maven : Maven war Maven Overlay.
Camunda Tomcat
— Camunda Tomcat, . Java Runtime Environment (JRE), . .
![Utilisation de Camunda pour une orchestration pratique](http://camunar.ru/paper/camunda_as_easy-to-use_orchestration_11.png)
- , 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.