рдЕрд╣реЛ рд╣рд╛рдмреНрд░! рд▓реЗрдЦрд╛рдЪрд╛ рдЕрдиреБрд╡рд╛рдж рдореА рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрдгреВрди рджреЗрдд рдЖрд╣реЗ
07.07.2020/XNUMX/XNUMX, рдЕрдиреБрд╡рд╛рдж
рдореА рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рдЬрд╛рд╡рд╛ рдирд╕рд▓реЗрд▓реНрдпрд╛ рд▓реЛрдХрд╛рдВрд╕реЛрдмрдд рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЛ: C# рд╡рд┐рдХрд╕рдХ, Node.JS/JavaScript рдбреЗрд╡реНрд╣рд▓рдкрд░ рдХрд┐рдВрд╡рд╛ Golang aficionados. рдпрд╛ рд╕рд░реНрд╡рд╛рдВрдирд╛ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ рдХреА рддреНрдпрд╛рдВрдирд╛ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдпрдВрддреНрд░рдгрд╛ рдХрд┐рдВрд╡рд╛ рд╡рд░реНрдХрдлреНрд▓реЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдСрд░реНрдбрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛, рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕, рд╕рд╛рдЧрд╛ рдЖрдгрд┐ рдиреБрдХрд╕рд╛рди рднрд░рдкрд╛рдИрдЪреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рдПрдХ рд╕рд╛рдзрди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рд╕рд╣ BPM рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо
рдирд╛рд╣реА! рдЦрд░рдВ рддрд░, рддреБрдореНрд╣реА рдЬрд╛рд╡рд╛рдЪреНрдпрд╛ рдЬреНрдЮрд╛рдирд╛рд╢рд┐рд╡рд╛рдп рдХреЕрдореБрдВрдбрд╛ рд╕рд╣рдЬрдкрдгреЗ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рдЖрд╡рдбреАрдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рднрд╛рд╖реЗрдд рдХреЛрдбрд╕рд╛рдареА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛. рдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА рдкрд╛рд╣реВ:
- рдореВрд▓рднреВрдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░;
- REST API
- Java рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд рдЗрддрд░ рднрд╛рд╖рд╛рдВрд╕рд╛рдареА рд╡рд┐рджреНрдпрдорд╛рди рдХреНрд▓рд╛рдпрдВрдЯ рд▓рд╛рдпрдмреНрд░рд░реАрдмрджреНрджрд▓ рд╕рд▓реНрд▓рд╛;
- рдЙрджрд╛рд╣рд░рдг C# рдЖрдгрд┐ Node.JS рд╡рд╛рдкрд░реВрди;
- рдХреЕрдореБрдВрдбрд╛ рд╕рд░реНрд╡реНрд╣рд░ (рдбреЙрдХрд░ рдХрд┐рдВрд╡рд╛ рдЯреЙрдордХреЕрдЯ) рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЪреЗ рдорд╛рд░реНрдЧ.
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
Camunda Java рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА Java Virtual Machine (JVM) рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. Camunda рдПрдХ REST API рдкреНрд░рджрд╛рди рдХрд░рддреЗ рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдЖрд╡рдбреАрдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рднрд╛рд╖реЗрдд рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ Camunda рд╕рд╣ REST рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ:
Camunda рдордзреАрд▓ рд╡рд░реНрдХрдлреНрд▓реЛ BPMN рдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд, рдЬреА рдореБрд│рд╛рдд XML рдлрд╛рдЗрд▓ рдЖрд╣реЗ. рддреЗ рдореЙрдбреЗрд▓ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ
рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдбреЙрдХрд░ рдкреНрд░рддрд┐рдореЗрджреНрд╡рд╛рд░реЗ рдХреЕрдореБрдВрдбрд╛ рдЪрд╛рд▓рд╡рдгреЗ
рдХреЕрдореБрдВрдбрд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рдбреЙрдХрд░ рд╡рд╛рдкрд░рдгреЗ. рдХреЕрдореБрдВрдбрд╛ рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рдЪреЗ рдкрд░реНрдпрд╛рдпреА рдорд╛рд░реНрдЧ рдпрд╛ рд▓реЗрдЦрд╛рдд рдирдВрддрд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗрдд.
рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдлрдХреНрдд рдЪрд╛рд▓рд╡рд╛:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
рддреБрдореНрд╣рд╛рд▓рд╛ Linux, JVMs рдХрд┐рдВрд╡рд╛ Tomcats рдмрджреНрджрд▓ рдХрд╛рд│рдЬреА рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рдбреЙрдХрд░рдлрд╛рдИрд▓реНрд╕ рдЖрдгрд┐ рдореВрд▓рднреВрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реВрдЪрдирд╛) рдпреЗрдереЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд
рддреБрдореНрд╣рд╛рд▓рд╛ Camunda Enterprise Edition рдЪрд╛рд▓рд╡рд╛рдпрдЪреА рдЕрд╕рд▓реНрдпрд╛рд╕ рддреБрдореНрд╣реА рд╕рд╣рдЬ рдмрджрд▓ рдХрд░реВ рд╢рдХрддрд╛
рддрдерд╛рдкрд┐, рдбреЙрдХрд░рд╕рд╣ рдХреЕрдореБрдВрдбрд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдордзреНрдпреЗ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрд╛рдЬреВ рдЖрд╣реЗ: рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЙрдордХреЕрдЯрдЪреА рдЖрд╡реГрддреНрддреА рдорд┐рд│реЗрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рдиреЗрд╣рдореАрдЪ рдирд╡реАрдирддрдо рдирд┐рд░рд╛рдХрд░рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдирд╕рддрд╛рдд. рдпрд╛рд╡рд░ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЖрдкрдг рдЗрдЪреНрдЫрд┐рдд рдЯреЙрдордХреЕрдЯ рд╡рд┐рддрд░рдгрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрдкрд▓реА рд╕реНрд╡рддрдГрдЪреА рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рдЦрд╛рд▓реА рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЙрдкрд╛рдпрд╛рдВрдкреИрдХреА рдПрдХ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЙрдбреЗрд▓ рдЙрдкрдпреЛрдЬрди
рдХреНрд▓рд╛рд╕рд┐рдХ рдЯреНрд░рд┐рдк рдмреБрдХрд┐рдВрдЧрд╕рд╛рдареА рд╕рд╛рдЧрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡рд╛рдкрд░реВрди рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ рдЬрд┐рдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд▓рдЧ рддреАрди рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХрд░рд╛рдпрдЪреНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рдирдВрддрд░рдЪреНрдпрд╛ рдЕрдкрдпрд╢рд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдпрд╢рд╕реНрд╡реАрд░реАрддреНрдпрд╛ рдкреВрд░реНрдг рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреГрддреАрдВрдЪреА рднрд░рдкрд╛рдИ рдХрд░рд╛. 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
рдкреБрдвреАрд▓ рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рд╢реНрди рдЖрд╣реЗ: рдХреЕрдореБрдВрдбрд╛ рдХрд╛рд░ рдмреБрдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕ рдХрд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ? рдХрд╛рдореБрдВрдбрд╛ рдХрд╛рд╣реА рдЕрдВрдЧрднреВрдд рд╡рд╛рдкрд░реВрди рд╕реЗрд╡рд╛рдВрдирд╛ рддрд╛рддреНрдХрд╛рд│ рдХреЙрд▓ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА (рдкреБрд╢-рдкреНрд░рд┐рдиреНрд╕рд┐рдкрд▓).
рдореНрд╣рдгреВрди рдкреНрд░рдердо рдЖрдкрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
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 рд╡рд╛рдкрд░реВрди рд╣реЗ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдкрдг рдпрд╛рд╕рд╛рдареА рд╡реЗрд│ рд▓рд╛рдЧреЗрд▓. рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рдлрдХреНрдд рдХрд╛рд╣реА рдХреНрд▓рд╛рдпрдВрдЯ рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
рдпрд╛рдХреНрд╖рдгреА, рдЕрдиреЗрдХ рддрдпрд╛рд░ рдХреНрд▓рд╛рдпрдВрдЯ рд▓рд╛рдпрдмреНрд░рд░реА рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд:
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
╤Б╤Б╤Л╨╗╨║╨░ . рдХреЕрдореБрдВрдбрд╛ рджреНрд╡рд╛рд░реЗ рд╕рдорд░реНрдерд┐рдд; - рдЬрд╛рд╡рд╛:
╤Б╤Б╤Л╨╗╨║╨░ . рдХреЕрдореБрдВрдбрд╛ рджреНрд╡рд╛рд░реЗ рд╕рдорд░реНрдерд┐рдд; - рд╕реА #:
╤Б╤Б╤Л╨╗╨║╨░ ╨╕╤Б╤Б╤Л╨╗╨║╨░ . рд╣реЗ рджреЛрдиреНрд╣реА рдкреНрд░рдХрд▓реНрдк рдордзреНрдпрд╡рд░реНрддреА рдЕрд╡рд╕реНрдереЗрдд рдЖрд╣реЗрдд рдЖрдгрд┐ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рд╕реБрдкреНрдд рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рдкреНрд░рд╛рд░рдВрдн рдмрд┐рдВрджреВ рдореНрд╣рдгреВрди рдХрд╛рдо рдХрд░реВ рд╢рдХрддрд╛рдд; - PHP:
╤Б╤Б╤Л╨╗╨║╨░ - рдЦреВрдк рдкреВрд░реНрдг рдирд╛рд╣реА рдЖрдгрд┐ рдирд╡реАрдирддрдо API рдмрджрд▓рд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдорд▓рд╛ рддреЗ рд╡рд╛рдкрд░рдгрд╛рд░реЗ рдкреНрд░рдХрд▓реНрдк рдорд╛рд╣рд┐рдд рдЖрд╣реЗрдд.
JavaScript рдЖрдгрд┐ Java рд╡рдЧрд│рддрд╛, рдХреНрд▓рд╛рдпрдВрдЯ рд▓рд╛рдпрдмреНрд░рд░реА Camunda рдЙрддреНрдкрд╛рджрдирд╛рдЪрд╛рдЪ рднрд╛рдЧ рдирд╛рд╣реАрдд. рддреЗ 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 рдордзреАрд▓ рдкреНрд░реА-рдмрд┐рд▓реНрдЯ рдбреЙрдХрд░ рдЗрдореЗрдЬрд▓рд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгреВрди, рддреБрдореНрд╣реА рдЯреЙрдордХреЕрдЯ рд╕реНрд╡рдд: рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЕрдзрд┐рдХреГрдд рдбреЙрдХрд░ рдЯреЙрдордХреЕрдЯ рдкреНрд░рддрд┐рдорд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд) рдЖрдгрд┐ рдирдВрддрд░ рддрдерд╛рдХрдерд┐рдд WAR рдлрд╛рдпрд▓реАрдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгреВрди Camunda рдХреЙрдкреА рдХрд░реВ рд╢рдХрддрд╛.
рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЕрдиреЗрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдгрд┐ Java рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░реВ рд╢рдХрдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА Camunda рд╕реНрдЯрдБрдбрдЕрд▓реЛрди рдпреБрджреНрдз рджреЗрдЦреАрд▓ рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛. рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдкреНрд░рдорд╛рдгреЗ рдорд╛рд╡реЗрди рдмрд┐рд▓реНрдб рд╕реЗрдЯ рдХрд░рд╛: рдмрд┐рд▓реНрдб
Camunda Tomcat рд╡рд┐рддрд░рдг рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЗ
рджреБрд╕рд░рд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгрдЬреЗ рдХреЕрдореБрдВрдбрд╛ рдЯреЙрдордХреЕрдЯ рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ, рддреЗ рдЕрдирдЭрд┐рдк рдХрд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рд▓рд╡рдгреЗ. рдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рддреБрдордЪреНрдпрд╛ рд╕рдВрдЧрдгрдХрд╛рд╡рд░ Java Runtime Environment (JRE) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреЗ рд╕рд╣рдЬ рдЕрд╕реВ рд╢рдХрддреЗ
рдбреЗрдЯрд╛рдмреЗрд╕ рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХрд╛рд╣реАрд╣реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЙрдордХреЕрдЯ рд╕рд╛рд░рдЦреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓
рдЯреЙрдордХреЕрдЯ рд╡рд╛рдкрд░реВрди рдХреЕрдореБрдВрдбрд╛ рдЪрд╛рд▓рд╡рдгреЗ
рд╢реЗрд╡рдЯрдЪрд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгрдЬреЗ рдЯреЙрдордХреЕрдЯ рд╕реНрд╡рддрдГ рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдд рдХреЕрдореБрдВрдбрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ,
рдХрдордВрдбрд╛рдЪреЗ рдЙрддреНрдкрд╛рджрди рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЗ
Camunda рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛рд╕ рд╕рд╣рд╕рд╛ рдХрд╛рд╣реА рдЕрдВрддрд┐рдо рд╕реЗрдЯрдЕрдк рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓. рдХреЕрдореБрдВрдбрд╛рдордзреНрдпреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рддрддреНрддреНрд╡реЗ рдЖрд╣реЗрдд рдЬреА рдпрд╛рдЪреЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд, рдкрд░рдВрддреБ рдореА рдпрд╛ рд▓реЗрдЦрд╛рдд рддреНрдпрд╛рдордзреНрдпреЗ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА - рдореА рдлрдХреНрдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдИрди: рд╡рд┐рддрд░рдгрд╛рдЪреЗ REST API рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА. рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдмрджрд▓рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓.
рдЧреЛрд│рд╛ рдХрд░реАрдд рдЖрд╣реЗ
рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рддреБрдореНрд╣реА рдХреЛрдгрддреА рднрд╛рд╖рд╛ рд╡рд╛рдкрд░рдд рдЖрд╣рд╛рдд рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛, Camunda рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рд╕рд░реНрд╡ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж REST API рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рд╡рд┐рд╢реЗрд╖рдд: рдбреЙрдХрд░ рд╡рд╛рдкрд░рддрд╛рдирд╛, рд╕реНрдерд╛рдкрдирд╛ рджреЗрдЦреАрд▓ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ.
рд╕реНрддреНрд░реЛрдд: www.habr.com