αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Camunda αžŠαžΎαž˜αŸ’αž”αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ REST αž“αž·αž„ Workflow Engine (αž‚αŸ’αž˜αžΆαž“ Java)

αžŸαž½αžŸαŸ’αžαžΈ αž αžΆαž”! αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αž”αž„αŸ’αž αžΆαž‰αž‡αžΌαž“αž’αŸ’αž“αž€αž“αžΌαžœαž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚αž’αžαŸ’αžαž”αž‘ "αž”αŸ’αžšαžΎ Camunda αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ Orchestration αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž„αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ REST αžŠαŸ‚αž›αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžšαžΎ (αžŠαŸ„αž™αž˜αž·αž“αž”αŸ‰αŸ‡ Java)" αžŠαŸ„αž™ Bernd RΓΌckerαŸ”

αžαŸ’αž„αŸƒαž‘αžΈ 07.07.2020/XNUMX/XNUMX, αž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚ αž’αžαŸ’αžαž”αž‘ Bernd RΓΌcker

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Camunda αžŠαžΎαž˜αŸ’αž”αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ REST αž“αž·αž„ Workflow Engine (αž‚αŸ’αž˜αžΆαž“ Java)

αž‡αžΆαžšαžΏαž™αŸ—αžαŸ’αž‰αž»αŸ†αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αžΈαž€αŸ’αžšαžΌαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž˜αž“αž»αžŸαŸ’αžŸαžŠαŸ‚αž›αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž…αžΆαžœαŸ‰αžΆαŸ– C# αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Node.JS/JavaScript αž¬αž’αŸ’αž“αž€αžŠαŸ‚αž›αž…αžΌαž›αž…αž·αžαŸ’αž Golang αŸ” αž–αž½αž€αž‚αŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžˆαž˜αž˜αž»αžαž“αžΉαž„αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ orchestration αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αžΈαž€αŸ’αžšαžΌαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž¬αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžš αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰ αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αžΆαžšαž’αžŸαŸ‹αž–αŸαž› Saga αž“αž·αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΌαž‘αžΆαžαŸ‹αžŸαŸ†αžŽαž„αŸ”

αžœαŸαž‘αž·αž€αžΆ BPM αž‡αžΆαž˜αž½αž™ αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αž–αžΈ Camunda αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαžšαž€αž·αž…αŸ’αž…αž”αŸ‚αž”αž“αŸαŸ‡αŸ” αž—αžΆαž–αžŸαŸ’αž“αž·αž‘αŸ’αž’αžŸαŸ’αž“αžΆαž›αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‚αžΊαž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž“αŸƒαž•αž›αž·αžαž•αž›αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž―αž€αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆ αž’αŸ’αž“αž€αž’αžΆαž…αž“αžΉαž„αž˜αžΆαž“αž€αžΆαžšαž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžαžΆ αž—αžΆαž–αžšαž½αžŸαžšαžΆαž™αžšαžΆαž€αŸ‹αž‘αžΆαž€αŸ‹αžšαž”αžŸαŸ‹ Camunda αž‚αžΊαž•αŸ’αžαŸ„αžαžŸαŸ†αžαžΆαž“αŸ‹αž‘αŸ…αž›αžΎαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ JavaαŸ” αžœαŸαž‘αž·αž€αžΆαž•αŸ’αžαž›αŸ‹αž±αž€αžΆαžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž»αžαž„αžΆαžš αž“αž·αž„αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Java αŸ” αžαžΎαžœαžΆαž–αž·αžαž‡αžΆαž˜αŸ‚αž“αž‘αŸ?

αž‘αŸ! αž‡αžΆαž€αžΆαžšαž–αž·αž αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž˜αžΆαž“αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„ Java αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž‘αŸ…αž‡αžΆαž€αžΌαžŠαž‡αžΆαž—αžΆαžŸαžΆαžŽαžΆαž˜αž½αž™αž“αŸƒαž‡αž˜αŸ’αžšαžΎαžŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›:

  • αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“;
  • REST API;
  • αžŠαŸ†αž”αžΌαž“αŸ’αž˜αžΆαž“αž›αžΎαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž’αžαž·αžαž·αž‡αž“αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαžŸαžΆαž•αŸ’αžŸαŸαž„αž€αŸ’αžšαŸ…αž–αžΈ Java;
  • αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ C# αž“αž·αž„ Node.JS;
  • αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Camunda (Docker ឬ Tomcat) αŸ”

αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜

Camunda αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαžšαžŸαŸαžšβ€‹αž‡αžΆβ€‹αž—αžΆαžŸαžΆ Java αž αžΎαž™β€‹αžαž˜αŸ’αžšαžΌαžœβ€‹αž±αŸ’αž™β€‹αž˜αžΆαž“ Java Virtual Machine (JVM) αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” Camunda αž•αŸ’αžαž›αŸ‹ REST API αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž‡αžΆαž—αžΆαžŸαžΆαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αž αž“αž·αž„αž”αŸ’αžšαžΎ REST αž‡αžΆαž˜αž½αž™ CamundaαŸ–

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Camunda αžŠαžΎαž˜αŸ’αž”αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ REST αž“αž·αž„ Workflow Engine (αž‚αŸ’αž˜αžΆαž“ Java)

αž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Camunda αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ BPMN αžŠαŸ‚αž›αž‡αžΆαž―αž€αžŸαžΆαžš XML αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ” αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‚αŸ†αžšαžΌαžŠαŸ„αž™αž”αŸ’αžšαžΎ Camunda Modeler.

αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda αžαžΆαž˜αžšαž™αŸˆαžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž˜αž»αž“

αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αžαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda αž‚αžΊαžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎ Docker αŸ” αžœαž·αž’αžΈαž‡αŸ†αž“αž½αžŸαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Camunda αžŠαžΎαž˜αŸ’αž”αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ REST αž“αž·αž„ Workflow Engine (αž‚αŸ’αž˜αžΆαž“ Java)

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžšαžαŸ‹αŸ–

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

αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž–αŸ’αžšαž½αž™αž”αžΆαžšαž˜αŸ’αž—αž’αŸ†αž–αžΈ Linux, Java Virtual Machines ឬ Tomcats αž‘αŸαŸ” Dockerfiles αž“αž·αž„αž―αž€αžŸαžΆαžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ (αž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžš) αž˜αžΆαž“αž“αŸ… Github.

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda Enterprise Edition αž’αŸ’αž“αž€αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αžΆαž“αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž› Dockerfile.

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž˜αžΆαž“αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž˜αž½αž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda αžŠαŸ„αž™αž”αŸ’αžšαžΎ DockerαŸ– αž’αŸ’αž“αž€αž“αžΉαž„αž”αž‰αŸ’αž…αž”αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ†αžŽαŸ‚αžšαž”αžŸαŸ‹ Tomcat αžŠαŸ‚αž›αž˜αž·αž“αžαŸ‚αž„αžαŸ‚αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαž‡αž½αžŸαž‡αž»αž›αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αž„αŸ’αž’αžŸαŸ‹αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž’αŸ†αž–αžΈαž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™ Tomcat αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αžŠαžΌαž…αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡ αž¬αž”αŸ’αžšαžΎαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‚αŸ†αžšαžΌαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ„αž™αž”αŸ’αžšαžΎαž‚αŸ†αžšαžΌ Saga αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αž€αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžŠαŸ†αžŽαžΎαžšαž”αŸ‚αž”αž”αž»αžšαžΆαžŽ αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž”αžΈαž‡αžΆαž”αŸ‹αŸ—αž‚αŸ’αž“αžΆ αž αžΎαž™αž•αŸ’αžαž›αŸ‹αžŸαŸ†αžŽαž„αž™αŸ‰αžΆαž„αž”αŸ’αžšαžŽαž·αžαžŠαž›αŸ‹αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž‡αŸ„αž‚αž‡αŸαž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αŸ” αž”αž„αŸ’αž αžΆαž‰αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ BPMN αžœαžΆαž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Camunda αžŠαžΎαž˜αŸ’αž”αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ REST αž“αž·αž„ Workflow Engine (αž‚αŸ’αž˜αžΆαž“ Java)

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎ 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 "[email protected]" 
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) αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸαžŠαžΆαž€αŸ‹αž’αžΆαžαž»αž€αžΆαžšαž„αžΆαžšαž‘αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž‡αž½αžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž•αž„αžŠαŸ‚αžšαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž€αž˜αŸ’αž˜αž€αžšαž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž’αžΆαžαž»αž€αžΆαžšαž„αžΆαžšαžαžΆαž˜αžšαž™αŸˆ REST αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž„αžΆαžš αž“αž·αž„αžšαžΆαž™αž€αžΆαžšαžŽαŸαž–αžΈαž€αžΆαžšαž”αž‰αŸ’αž…αž”αŸ‹αž‘αŸ… Camunda (Pull-Principle)αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Camunda αžŠαžΎαž˜αŸ’αž”αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ REST αž“αž·αž„ Workflow Engine (αž‚αŸ’αž˜αžΆαž“ Java)

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŠαŸ†αž”αžΌαž„αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎ fetchAndLock (αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αž˜αŸ’αž˜αž€αžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž—αžΆαžšαž€αž·αž…αŸ’αž…αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’)αŸ–

  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 αž αŸ’αž“αžΉαž„ αž€αž˜αŸ’αž˜αž€αžšαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αŸ” (αž…αŸ†αžŽαžΆαŸ†αžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž‰αŸ’αž…αžΌαž›αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαžαžΆαž„αž€αŸ’αžšαŸ…αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαžΎαžŠαŸ†αž”αžΌαž„)αŸ–

  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;
  • αž…αžΆαžœαŸ‰αžΆαŸ– αžαŸ†αžŽ. αž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ„αž™ Camunda;
  • C #:αžαŸ†αžŽ ΠΈ αžαŸ†αžŽ. αž‚αž˜αŸ’αžšαŸ„αž„αž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸαŸ‡αžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αž’αŸ’αž™αž˜ αž αžΎαž™αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‚αŸ’αž˜αžΆαž“αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αžΆαž…αž”αž˜αŸ’αžšαžΎαž‡αžΆαž…αŸ†αžŽαž»αž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸαž›αŸ’αž’αŸ”
  • αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ PHP: αžαŸ†αžŽ αž˜αž·αž“β€‹αž˜αŸ‚αž“β€‹αž‡αžΆβ€‹αž”αžŽαŸ’αžŽαžΆαž›αŸαž™β€‹αž–αŸαž‰αž›αŸαž‰β€‹αž‘αŸ αž αžΎαž™β€‹αž˜αž·αž“β€‹αžšαž½αž˜β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž€αžΆαžšβ€‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžŠαžΌαžš API αž…αž»αž„αž€αŸ’αžšαŸ„αž™β€‹αž”αž„αŸ’αž’αžŸαŸ‹β€‹αž“αŸ„αŸ‡β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžαŸ’αž‰αž»αŸ†β€‹αžŠαžΉαž„β€‹αž’αŸ†αž–αžΈβ€‹αž‚αž˜αŸ’αžšαŸ„αž„β€‹αžŠαŸ‚αž›β€‹αž”αŸ’αžšαžΎβ€‹αžœαžΆαŸ”

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αž“αŸƒ JavaScript αž“αž·αž„ Java αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž’αžαž·αžαž·αž‡αž“αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž•αž›αž·αžαž•αž› Camunda αžαŸ’αž›αž½αž“αž―αž„αž“αŸ„αŸ‡αž‘αŸαŸ” αž€αž»αŸ†αžšαŸ†αž–αžΉαž„αžαžΆαž–αž½αž€αž‚αŸαž“αžΉαž„αž‚αžΆαŸ†αž‘αŸ’αžšαž˜αž»αžαž„αžΆαžš REST API αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžšαž”αžŸαŸ‹ Camunda αŸ” αžŠαŸ„αž™αžŸαžΆαžšαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž˜αž·αž“αž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž·αž“αž˜αžΆαž“αž“αŸαž™αžαžΆαžœαžΆαž˜αž·αž“αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αž‘αŸ αžŸαžΌαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž› 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();

αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž›αžΎαž‚αŸαž αž‘αŸ†αž–αŸαžš github.com

αžœαž·αž’αžΈαž‡αŸ†αž“αž½αžŸαžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ Camunda

αžšαžΌαž”αž—αžΆαž– Docker αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž‡αžΆαž˜αž½αž™ "Camunda standalone WAR"

αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž˜αž»αž“αž–αžΈ Camunda αž’αŸ’αž“αž€αž’αžΆαž…αžšαŸ€αž”αž…αŸ† Tomcat αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ (αž§αž‘αžΆαž αžšαžŽαŸ αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαžšαžΌαž”αž—αžΆαž– Docker Tomcat αž•αŸ’αž›αžΌαžœαž€αžΆαžš) αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αž˜αŸ’αž›αž„ Camunda αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αŸαž αŸ…αžαžΆαž―αž€αžŸαžΆαžš WAR αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Camunda αžŠαžΎαž˜αŸ’αž”αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ REST αž“αž·αž„ Workflow Engine (αž‚αŸ’αž˜αžΆαž“ Java)

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αžΆαž“αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž‡αžΆαž…αŸ’αžšαžΎαž“ αž αžΎαž™αž’αžΆαž…αž”αŸ’αžŠαžΌαžšαž”αžšαž·αž™αžΆαž€αžΆαžŸαž”αž„αŸ’αž€αžΎαž Java αžαžΆαž˜αž”αŸ†αžŽαž„ αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Camunda Standalone war αž•αž„αžŠαŸ‚αžšαŸ” αžšαŸ€αž”αž…αŸ† Maven build αžŠαžΌαž…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ– build Maven αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαž„αŸ’αžšαŸ’αž‚αžΆαž˜ αž¬αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαŸ” Maven αž‡αžΆαž˜αž½αž™ Overlay.

αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™ Camunda Tomcat

αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αž‘αŸ€αžαž‚αžΊαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‘αžΆαž‰αž™αž€αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™ Camunda Tomcat αžšαž½αž…αž–αž“αŸ’αž›αžΆαžœαžΆ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž€αžΆαžš Java Runtime Environment (JRE) αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžœαžΆαž’αžΆαž…αž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž‘αžΆαž‰αž™αž€αž–αžΈαž‘αžΈαž“αŸαŸ‡.

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Camunda αžŠαžΎαž˜αŸ’αž”αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ REST αž“αž·αž„ Workflow Engine (αž‚αŸ’αž˜αžΆαž“ Java)

αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž¬αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Tomcat αžŠαžΌαž… αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš. αžαŸ’αž‰αž»αŸ†αžŠαžΉαž„αžαžΆ Tomcat αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αžαžœαžΆαžŸαžΆαž˜αž‰αŸ’αž‰αžŽαžΆαžŸαŸ‹αŸ” αž αžΎαž™ Google αž˜αžΆαž“αž…αž˜αŸ’αž›αžΎαž™αž…αŸ†αž–αŸ„αŸ‡αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda αžŠαŸ„αž™αž”αŸ’αžšαžΎ Tomcat

αž‡αž˜αŸ’αžšαžΎαžŸαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‚αžΊαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Tomcat αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž αžΎαž™αžŠαŸ†αž‘αžΎαž„ Camunda αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„. αžœαžΆαž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž’αŸ’αž“αž€αž“αžΌαžœαž±αž€αžΆαžŸαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž€αŸ†αžŽαŸ‚αžŽαžΆαž˜αž½αž™αž“αŸƒ Tomcat αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αž αž¬αž§αž‘αžΆαž αžšαžŽαŸ αžŠαŸ†αž‘αžΎαž„αžœαžΆαž‡αžΆαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžœαžΈαž“αžŠαžΌαŸ”

αž€αžΆαžšβ€‹αž…αžΆαž”αŸ‹β€‹αž•αŸ’αžŠαžΎαž˜β€‹αž•αž›αž·αžβ€‹αž€αž˜αŸ’αž˜ Camunda

αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αžœαžΆαž“αžΉαž„αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž˜αž½αž™αž…αŸ†αž“αž½αž“ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda αŸ” Camunda αž˜αžΆαž“αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŠαŸ‚αž›αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžšαžΏαž„αž“αŸαŸ‡αž™αŸ‰αžΆαž„αž›αž˜αŸ’αž’αž·αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž”αŸ‰αŸ‡αž–αž½αž€αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž‘αŸ - αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αŸ– REST API αž“αŸƒαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‘αŸαŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž…αž„αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžœαžΆαŸ”

αžŸαž„αŸ’αžαŸαž”

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ Camunda αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹ αžŠαŸ„αž™αž˜αž·αž“αž‚αž·αžαž–αžΈαž—αžΆαžŸαžΆαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαŸ” αž…αŸ†αžŽαž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αž‚αžΊαžαžΆαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžαžΆαž˜αžšαž™αŸˆ REST API αŸ” αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž€αŸαžŸαžΆαž˜αž‰αŸ’αž‰αž•αž„αžŠαŸ‚αžš αž‡αžΆαž–αž·αžŸαŸαžŸαž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ Docker αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹