แฐแแ แฐแแแ ! แแฅแแแแก แงแฃแ แแแฆแแแแก แฌแแ แแแแแแแแแ แกแขแแขแแแก แแแ แแแแแก
07.07.2020/XNUMX/XNUMX, แแแ แแแแแ
แแ แฎแจแแ แแ แแแแแแฎแแแแ แแแแ แแกแแ แแแกแแก แแ แฅแแขแแฅแขแฃแ แแก แแ แ Java แแแแแแแแแแแแ: C#, Node.JS/JavaScript แแแแแแแแแ แแแแแ แแ Golang-แแก แแแงแแแ แฃแแแแแแ. แงแแแแ แแแแแแแก แแแฃแฅแ แแแ แแก แคแแฅแขแ, แ แแ แแแ แแกแแญแแ แแแแแ แกแแแ แแแกแขแ แ แซแ แแแ แแแแ แแกแแ แแแกแแก แแ แฅแแขแแฅแขแฃแ แแจแ แแ แฃแแ แแแแ แแแกแขแ แฃแแแแขแ แกแแแฃแจแแ แแแแแแแก แแแขแแแแแแชแแแกแ แแ แจแแแแแแแก, แแ แแแก แแแขแแ แแแแก, แกแแแแกแ แแ แขแ แแแแแฅแชแแแแแก แแแแแแแกแแชแแแก แฃแแแ แแก แแแกแแแแแแแแแ.
BPM แแแแขแคแแ แแ
แแ แ! แคแแฅแขแแแ แแแแ, แแฅแแแ แจแแแแซแแแแ แแแ แขแแแแ แแแฃแจแแแ Camunda Java-แก แชแแแแแก แแแ แแจแ แแ แแแแแแแคแแแฃแ แแ แแ แแ แฅแแขแแฅแขแฃแ แ แแฅแแแแ แแ แฉแแแแแแก แแแแแกแแแแ แแแแแ แแแแแ แแแแกแแแแก. แแ แกแขแแขแแแจแ แฉแแแ แแแแแแฎแแแแแ:
- แซแแ แแแแแ แแ แฅแแขแแฅแขแฃแ แ;
- REST API;
- แ แฉแแแแแ แแ แกแแแฃแแ แแแแแแขแแแแก แแแแแแแแแแแแแก แจแแกแแฎแแ Java-แก แแแ แแ แกแฎแแ แแแแแแกแแแแก;
- C# แแ Node.JS แแแแแงแแแแแแก แแแแแแแแ;
- Camunda แกแแ แแแ แแก (Docker แแ Tomcat) แแแจแแแแแก แแแแแ.
แแ แฅแแขแแฅแขแฃแ แ
Camunda แแแฌแแ แแแแ แฏแแแแจแ แแ แแแกแแจแแแแแ แแแแแฎแแแก Java แแแ แขแฃแแแฃแ แแแแฅแแแแก (JVM). Camunda แแแแแแแแแ REST API-แก, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแฌแแ แแ แแฅแแแแแแแก แกแแกแฃแ แแแ แแแแแ แแ แแแแแแงแแแแ REST แแแแฃแแแแกแแแ แแ แแแ:
แแแแฃแแแแจแ แกแแแฃแจแแ แแแแแแแแ แแแแแกแแแฆแแ แแแ BPMN-แจแ, แ แแแแแแช แซแแ แแแแแแ XML แคแแแแแ. แแแกแ แแแแแแแ แแแ แจแแกแแซแแแแแแแ แแแแแงแแแแแแ
แแแแฃแแแแก แแแจแแแแ แฌแแแแกแฌแแ แฉแแจแแแแแฃแแ Docker แแแแแกแแฎแฃแแแแแก แแแจแแแแแแ
แแแแฃแแแแก แแแจแแแแแก แฃแแแ แขแแแแกแ แแแแ Docker-แแก แแแแแงแแแแแ. แแแแฃแแแแก แแแจแแแแแก แแแขแแ แแแขแแฃแแ แแแแแ แแฆแฌแแ แแแแ แแ แกแขแแขแแแจแ แแแแแแแแแแแ.
แแ แจแแแแฎแแแแแจแ, แฃแแ แแแแ แแแฃแจแแแ:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
แแฅแแแ แแ แฃแแแ แแแแ แแแฃแแแ Linux-แแ, Java-แแก แแแ แขแฃแแแฃแ แแแแฅแแแแแแ แแ Tomcats-แแ. Dockerfiles แแ แซแแ แแแแแ แแแแฃแแแแขแแชแแ (แแแแแแแแแ, แกแแญแแ แ แแแแแชแแแแ แแแแแแแแ แแแแแแจแแ แแแแก แแแกแขแ แฃแฅแชแแแแ) แฎแแแแแกแแฌแแแแแแ แแฅ
แแฃ แแกแฃแ แ แแแฃแจแแแ Camunda Enterprise Edition, แจแแแแซแแแแ แแแ แขแแแแ แจแแชแแแแแ
แแฃแแชแ, แแ แแก แแ แแ แฃแแ แงแแคแแแ แแฎแแ แ แแแแฃแแแแก แแแแแ แแก แแแแแงแแแแแแ แแแจแแแแแจแ: แแฅแแแ แแแแฆแแแ Tomcat-แแก แแแ แกแแแก, แ แแแแแแช แงแแแแแแแแก แแ แจแแแชแแแก แฃแแฎแแแก แแแแแกแฌแแ แแแแแก. แแแแก แแแแแแแ แแกแแชแแแแแแแ, แจแแแแซแแแแ แแแแแ แจแแฅแแแแ Docker แแแแแกแแฎแฃแแแแ แกแแกแฃแ แแแแ Tomcat แแแแแฌแแแแแแก แกแแคแฃแซแแแแแ, แ แแแแ แช แแก แแแฉแแแแแแแ แแ แแแแแแแแจแ, แแ แแแแแแงแแแแ แฅแแแแแ แแฆแฌแแ แแแ แแ แ-แแ แแ แแแแแฌแงแแแขแ.
แแ แแชแแกแแก แแแแแแแก แแแแแ แแแ
แแแแแ แจแแแฎแแแแ แแแแแแแแก แกแแแแก แจแแแแแแแก แแแแแงแแแแแแ แแแแกแแแฃแ แ แกแแแแแแแฃแ แ แแแฏแแแจแแแกแแแแก, แกแแแแช แแกแฃแ แ แแแแแแแ แกแแแ แแแฅแแแแแแแก แฉแแ แแแ แแ แแแฎแแแแแแ แแแแแฆแแฃแ แแแ แฌแแ แแแขแแแฃแแ แฅแแแแแแแแแก แจแแแแแ แฌแแ แฃแแแขแแแแแแแก แจแแแแฎแแแแแจแ. 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
แจแแแแแแ แกแแแแขแแ แแกแ แแแแฎแแ แแ แแก แ แแแแ แแแฅแขแแฃแ แแแก แแแแฃแแแ แแ แแชแแแฃแ แแแก, แ แแแแ แแชแแ แแแแฅแแแแก แแแฏแแแจแแ? แแแแฃแแแแก แจแแฃแซแแแ แแ แ แแฎแแแแ แแแฃแงแแแแแแแแ แแแ แแแแก แกแแ แแแกแแแ (Push-Principle), แแแแแแ แแ แฉแแจแแแแแฃแแ แแแแแงแแแแแแ
แแกแ แ แแ, แฏแแ แฃแแแ แแแแแแแแ
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
แแแจแแ แแก แฃแแฎแแ แ แแแแฃแแแแก
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-แแ แแแ แแแแ แแแ แขแแแแ แแแแแกแแแแ แแ แแแ แแแแ แแแแก แแแแแ. JavaScript-แจแ แแแแก แแแแแแแแ แแแกแแฎแแ แฎแแแแแแ JQuery-แแก แแแแแงแแแแแแ, แฎแแแ C#-แจแ แจแแแแซแแแแ แแแแแแงแแแแ System.Net.Http แแ Newtonsoft.Json. แแแแ แแ แแแแก แแ แ แแแกแญแแ แแแแ. แแกแ แ แแ, แจแแแแซแแแแ แฃแแ แแแแ แแแแแแงแแแแ แแแแแแขแแก แแแแแแแแแแ.
แแแแแแแ แฎแแแแแกแแฌแแแแแแ แ แแแแแแแแ แแแ แแแแแแขแแก แแแแแแแแแแ:
- Javascript:
แแแแแแแ . แแแแฃแแแแก แแฎแแ แแแญแแ แแ; - แฏแแแ:
แแแแแแแ . แแแแฃแแแแก แแฎแแ แแแญแแ แแ; - C #:
แแแแแแแ ะธแแแแแแแ . แแ แแแ แแก แแ แแแฅแขแ แจแฃแแแแแฃแ แแแแแแแ แแแแแจแแ แแ แแ แแฅแขแแแฃแแแ แแ แแแแฉแแแ แแฅแขแแแแแ, แแแแ แแ แจแแแซแแแแ แแงแแก แแแ แแ แกแแฌแงแแกแ แฌแแ แขแแแ; - PHP:
แแแแแแแ แแ แแ แแก แซแแแแแ แกแ แฃแแ แแแแแแแแแแ แแ แแ แจแแแชแแแก แฃแแฎแแแก API แชแแแแแแแแแก, แแแแ แแ แแ แแแชแ แแ แแแฅแขแแแ, แ แแแแแแแช แแแก แแงแแแแแแ.
JavaScript-แแกแ แแ Java-แก แแแ แแ, แแแแแแขแแก แแแแแแแแแแแแ แแ แแ แแก แแแแแ แแแแฃแแแแก แแ แแแฃแฅแขแแก แแแฌแแแ. แแฃ แแแแแแ, แ แแ แแแ แแฎแแ แ แแแฃแญแแ แแ Camunda REST API-แก แงแแแแ แแแฎแแกแแแแแแแแก. แแฎแแแแ แแแแขแแ, แ แแ แแแแแแแแแแ แแ แแซแแแแ แแแ แแแแฃแ แคแฃแแฅแชแแแก, แแ แแแจแแแแก แ แแ แแก แแฅ แแ แแ แแก, แงแแแแแแแแก แจแแแแแฌแแแ Camunda 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 standalone WAR"-แแ
แ แแแแ แช Camunda-แแแ แฌแแแแกแฌแแ แฉแแจแแแแแฃแแ Docker แแแแแกแแฎแฃแแแแแก แแแขแแ แแแขแแแ, แจแแแแซแแแแ แแแแแ แแแแแแแแแ Tomcat (แแแแแแแแแ, แแคแแชแแแแฃแ แ Docker Tomcat แกแฃแ แแแแแแก แกแแคแฃแซแแแแแ) แแ แจแแแแแ แแแแแแแแ แแ Camunda แแแกแจแ, แ แแแแ แช แ.แฌ. WAR แคแแแแ.
แแฃ แแฅแแแ แแแฅแแ แแแแ แ แแแแแขแแแแแ แแแแฎแแแแ แแ แจแแแแซแแแแ Java-แก แแแแกแขแ แฃแฅแชแแแก แแแ แแแแก แแแ แแแแ, แแกแแแ แจแแแแซแแแแ Camunda Standalone War-แแก แแแแคแแแฃแ แแชแแ. แแแแงแแแแ Maven build, แ แแแแ แช แแ แแแแแแแแแแจแ: build
Camunda Tomcat-แแก แแแกแขแ แแแฃแชแแแก แแแจแแแแ
แแแแแ แแ แแ แแแ แแแแขแแ แฃแแ แแแแ แฉแแแแขแแแ แแแ Camunda Tomcat แแแกแขแ แแแฃแชแแ, แแแฎแกแแแแ แแแ แแ แแแฃแจแแแ. แแแแกแแแแแก แกแแญแแ แแ แแฎแแแแ Java Runtime Environment (JRE) แแแแแกแขแแแแ แแแฃแแ แแฅแแแแก แแแแแแฃแขแแ แจแ. แแก แจแแแซแแแแ แแงแแก แแแ แขแแแแ
แแแแแชแแแแ แแแแแก แจแแกแแชแแแแแแ แแ แกแฎแแ แ แแแแก แแแกแแแแแแแแแ แกแแญแแ แแ Tomcat like-แแก แแแแคแแแฃแ แแชแแ
แแแแฃแแแแก แแแจแแแแ Tomcat-แแก แแแแแงแแแแแแ
แแแแ แแแขแแ แแแขแแแ แแ แแก Tomcat-แแก แแแแคแแแฃแ แแชแแ แแ แแแกแจแ Camunda-แก แแแงแแแแแ.
แแแแฃแแแแก แฌแแ แแแแแแจแ แแแจแแแแ
แ แแแแ แช แฌแแกแ, แแแแกแแแแก แแแแญแแ แแแแแ แกแแแแแแ แแแงแแแแแแก แแแแแแแแ แแแแฃแแแแก แแแกแแจแแแแแ. แแแแฃแแแแก แแฅแแก แแแแแแแแแแแ, แ แแแแแแแช แแฆแฌแแ แก แแแแก แซแแแแแ แแแขแแแฃแ แแ, แแแแ แแ แแ แแแ แแ แกแขแแขแแแจแ แแ แจแแแแฎแแแ - แแฎแแแแ แแ แ แแแแแแแแก แแแแแงแแแ: แแแกแขแ แแแฃแชแแแก REST API แแ แแ แแก แแแแคแแแฃแ แแ แแแฃแแ แแแขแแ แแแแชแแแกแแแแก แแแแฃแแแกแฎแแแแแ. แแฅแแแ แจแแแซแแแแ แแกแฃแ แ แจแแชแแแแแ แแก.
แจแแแแฏแแแแแแแ-up
แ แแแแ แช แแฅแแแ แจแแแแจแแแ, แแแแฃแแแแกแแแ แแฃแจแแแแแก แแแฌแงแแแ แซแแแแแ แแแ แขแแแแ, แแแฃแฎแแแแแแ แแแแกแ, แแฃ แ แ แแแแก แแงแแแแแ. แแแแแแ แ แแก แแ แแก, แ แแ แงแแแแ แแแแฃแแแแแชแแ แฎแแแแ REST API-แแก แแแจแแแแแแ. แแแกแขแแแแชแแ แแกแแแ แกแแแแแแ แแแ แขแแแแ, แแแแกแแแฃแแ แแแแ Docker-แแก แแแแแงแแแแแแกแแก.
แฌแงแแ แ: www.habr.com