āĻšā§ āĻšāĻžāĻŦāĻ°! āĻāĻŽāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋāĻ° āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻĒāĻ¨āĻžāĻ° āĻĻā§āĻˇā§āĻāĻŋ āĻāĻāĻ°ā§āĻˇāĻŖ āĻāĻ°āĻāĻŋ
07.07.2020/XNUMX/XNUMX, āĻ
āĻ¨ā§āĻŦāĻžāĻĻ
āĻāĻŽāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ āĻ¨āĻ¨-āĻāĻžāĻāĻž āĻ˛ā§āĻā§āĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻžāĻāĻā§āĻ°ā§āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻŋ: C# āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°, Node.JS/JavaScript āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°, āĻ āĻĨāĻŦāĻž Golang aficionadosāĨ¤ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻāĻ˛ā§āĻ°āĻ āĻāĻ āĻ¸āĻ¤ā§āĻ¯ā§āĻ° āĻŽā§āĻā§āĻŽā§āĻāĻŋ āĻšāĻ¯āĻŧ āĻ¯ā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻŽāĻžāĻāĻā§āĻ°ā§āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻ āĻ°ā§āĻā§āĻ¸ā§āĻā§āĻ°ā§āĻļāĻ¨ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦāĻž āĻāĻ°ā§āĻŽāĻĒā§āĻ°āĻŦāĻžāĻšāĻā§ āĻ¸ā§āĻā§āĻ°ā§āĻŽāĻ˛āĻžāĻāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŦāĻ āĻ āĻ°ā§āĻĄāĻžāĻ° āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž, āĻāĻžāĻāĻŽāĻāĻāĻ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž, āĻ¸āĻžāĻāĻž āĻāĻŦāĻ āĻā§āĻˇāĻ¤āĻŋāĻĒā§āĻ°āĻŖ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻ āĻ°ā§āĻāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻā§āĻ˛ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤
āĻ¸āĻā§āĻā§ BPM āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽ
āĻ¨āĻž! āĻāĻ¸āĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻ¸āĻšāĻā§āĻ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻā§āĻ¨ā§ āĻāĻžāĻāĻž āĻā§āĻāĻžāĻ¨ āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻāĻ¨ā§āĻĻā§āĻ° āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŦ:
- āĻŽā§āĻ˛āĻŋāĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯;
- REST API
- āĻāĻžāĻāĻž āĻŦā§āĻ¯āĻ¤ā§āĻ¤ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻžāĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ;
- āĻāĻĻāĻžāĻšāĻ°āĻŖ C# āĻāĻŦāĻ Node.JS āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§;
- āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻĒāĻžāĻ¯āĻŧ (āĻĄāĻāĻžāĻ° āĻŦāĻž āĻāĻŽāĻā§āĻ¯āĻžāĻ)āĨ¤
āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯
āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻžāĻāĻžāĻ¤ā§ āĻ˛ā§āĻāĻž āĻāĻŦāĻ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻāĻž āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ (JVM) āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻāĻāĻŋ REST API āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻāĻ¨ā§āĻĻā§āĻ° āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻ˛āĻŋāĻāĻ¤ā§ āĻāĻŦāĻ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻžāĻ° āĻ¸āĻžāĻĨā§ REST āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ:
āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻžāĻ¯āĻŧ āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻĢā§āĻ˛ā§āĻā§āĻ˛āĻŋ BPMN-āĻ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻ¯āĻž āĻŽā§āĻ˛āĻ¤ āĻāĻāĻāĻŋ XML āĻĢāĻžāĻāĻ˛āĨ¤ āĻāĻāĻŋ āĻĻāĻŋāĻ¯āĻŧā§ āĻŽāĻĄā§āĻ˛ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŦ-āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§
āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ¸āĻšāĻ āĻāĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻĄāĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĨ¤ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻžāĻ˛ā§ āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻāĻĒāĻžāĻ¯āĻŧāĻā§āĻ˛āĻŋ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻĒāĻ°ā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§ā§ˇ
āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻ¸āĻšāĻāĻāĻžāĻŦā§ āĻāĻžāĻ˛āĻžāĻ¨:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
āĻāĻĒāĻ¨āĻžāĻā§ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸, āĻā§āĻāĻŋāĻāĻŽ āĻŦāĻž āĻāĻŽāĻā§āĻ¯āĻžāĻāĻ¸ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻŋāĻ¨ā§āĻ¤āĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¨āĻžāĨ¤ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻāĻŦāĻ āĻŽā§āĻ˛āĻŋāĻ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§) āĻāĻāĻžāĻ¨ā§ āĻāĻĒāĻ˛āĻŦā§āĻ§
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻ¨ā§āĻāĻžāĻ°āĻĒā§āĻ°āĻžāĻāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻšāĻā§āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻ¯āĻžāĻāĻšā§āĻ, āĻĄāĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻ¨ā§āĻ¤āĻŋāĻŦāĻžāĻāĻ āĻĻāĻŋāĻ āĻ°āĻ¯āĻŧā§āĻā§: āĻāĻĒāĻ¨āĻŋ āĻāĻŽāĻā§āĻ¯āĻžāĻā§āĻ° āĻāĻāĻāĻŋ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻĒāĻžāĻŦā§āĻ¨ āĻ¯āĻž āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻ¸āĻ°ā§āĻŦāĻļā§āĻˇ āĻ¸āĻāĻļā§āĻ§āĻ¨āĻā§āĻ˛āĻŋ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻāĻāĻŋāĻā§ āĻāĻŋāĻ°ā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻŋ āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻāĻŽāĻā§āĻ¯āĻžāĻ āĻŦāĻŋāĻ¤āĻ°āĻŖā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¯ā§āĻŽāĻ¨ āĻāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖā§ āĻĻā§āĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻā§, āĻŦāĻž āĻ¨ā§āĻā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨āĨ¤
āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŽāĻĄā§āĻ˛ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž
āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ āĻā§āĻ°āĻŋāĻĒ āĻŦā§āĻāĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻžāĻāĻž āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĻā§āĻāĻŋ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ°āĻŋāĻ¤ā§ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻ ā§āĻ¯āĻžāĻāĻļāĻ¨ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻāĻŦāĻ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻžāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻāĻ°āĻž āĻ ā§āĻ¯āĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻ¨ā§āĻĻāĻ°āĻāĻžāĻŦā§ āĻā§āĻˇāĻ¤āĻŋāĻĒā§āĻ°āĻŖ āĻĻāĻŋāĻ¤ā§ āĻāĻžāĻ¨āĨ¤ 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 āĻāĻ˛ āĻāĻ°āĻž āĻ¸āĻšāĻāĨ¤ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§, āĻāĻāĻŋ JQuery āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻāĻāĻžāĻŦā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ C# āĻ, System.Net.Http āĻāĻŦāĻ Newtonsoft.Json āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻāĻŦā§. āĻ¤āĻžāĻ āĻāĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§ āĻāĻŋāĻā§ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨.
āĻāĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§, āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ°ā§āĻĄāĻŋāĻŽā§āĻĄ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻāĻĒāĻ˛āĻŦā§āĻ§:
- āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ:
āĻ˛āĻŋāĻāĻ . Camunda āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤; - āĻāĻžāĻāĻž:
āĻ˛āĻŋāĻāĻ . Camunda āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤; - āĻ¸āĻŋ #:
āĻ˛āĻŋāĻāĻ иāĻ˛āĻŋāĻāĻ . āĻāĻ āĻĻā§āĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻ āĻāĻāĻāĻŋ āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§ āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻžāĻ°ā§āĻ¯āĻ¤ āĻ¸ā§āĻĒā§āĻ¤, āĻ¤āĻŦā§ āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻ¸ā§āĻāĻ¨āĻž āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§; - āĻĒāĻŋāĻāĻāĻāĻĒāĻŋ:
āĻ˛āĻŋāĻāĻ - āĻā§āĻŦ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¨āĻ¯āĻŧ āĻāĻŦāĻ āĻ¸āĻ°ā§āĻŦāĻļā§āĻˇ API āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°ā§ āĻ¨āĻž, āĻ¤āĻŦā§ āĻāĻŽāĻŋ āĻāĻŽāĻ¨ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋ āĻāĻžāĻ¨āĻŋ āĻ¯āĻž āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤
āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻŦāĻ āĻāĻžāĻāĻž āĻŦāĻžāĻĻ āĻĻāĻŋāĻ¯āĻŧā§, āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻā§āĻ˛āĻŋ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻĒāĻŖā§āĻ¯ā§āĻ° āĻ āĻāĻļ āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻļāĻž āĻāĻ°āĻŦā§āĻ¨ āĻ¨āĻž āĻ¯ā§ āĻ¤āĻžāĻ°āĻž āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ 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" āĻ¸āĻš āĻāĻžāĻ¸ā§āĻāĻŽ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ
āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŦ-āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĄāĻāĻžāĻ° āĻāĻŋāĻ¤ā§āĻ°ā§āĻ° āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻā§ āĻāĻŽāĻā§āĻ¯āĻžāĻ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻĄāĻāĻžāĻ° āĻāĻŽāĻā§āĻ¯āĻžāĻ āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§) āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻ¤āĻĨāĻžāĻāĻĨāĻŋāĻ¤ āĻāĻ¯āĻŧāĻžāĻ° āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻžāĻā§ āĻāĻĒāĻŋ āĻāĻ°ā§āĻ¨ā§ˇ
āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻ
āĻ¨ā§āĻ āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāĻžāĻāĻž āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻ¨āĻāĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻĒāĻ¨āĻŋ āĻā§āĻ¯āĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ
ā§āĻ¯āĻžāĻ˛ā§āĻ¨ āĻ¯ā§āĻĻā§āĻ§āĻ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ¤ āĻāĻāĻāĻŋ Maven āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°ā§āĻ¨: āĻŦāĻŋāĻ˛ā§āĻĄ
āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻŽāĻā§āĻ¯āĻžāĻ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻļā§āĻ°ā§ āĻšāĻā§āĻā§
āĻāĻ°ā§āĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻšāĻ˛ āĻā§āĻ¯āĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻŽāĻā§āĻ¯āĻžāĻ āĻĄāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻŦāĻŋāĻāĻļāĻ¨ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻž, āĻāĻāĻŋ āĻāĻ¨āĻāĻŋāĻĒ āĻāĻ°āĻž āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§āĨ¤ āĻāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ°ā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž Java Runtime Environment (JRE) āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻāĻāĻž āĻ¸āĻšāĻā§āĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻŦāĻž āĻ
āĻ¨ā§āĻ¯ āĻāĻŋāĻā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻŽāĻā§āĻ¯āĻžāĻ āĻŽāĻ¤ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§
āĻāĻŽāĻā§āĻ¯āĻžāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§
āĻļā§āĻˇ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻš'āĻ˛ āĻ¨āĻŋāĻā§āĻ āĻāĻŽāĻā§āĻ¯āĻžāĻ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻ¤ā§ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨,
āĻā§āĻĒāĻžāĻĻāĻ¨ā§ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻžāĻ˛ā§ āĻāĻ°āĻž
āĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŋāĻā§ āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ¸ā§āĻāĻāĻĒā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§āĨ¤ āĻāĻžāĻŽā§āĻ¨ā§āĻĄāĻžāĻ¯āĻŧ āĻāĻŽāĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻāĻž āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻāĻāĻŋāĻā§ āĻŦāĻŋāĻļāĻĻāĻāĻžāĻŦā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§, āĻ¤āĻŦā§ āĻāĻŽāĻŋ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻ¸ā§āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¯āĻžāĻŦ āĻ¨āĻž - āĻāĻŽāĻŋ āĻā§āĻŦāĻ˛ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻ¨āĻžāĻŽ āĻĻā§āĻŦ: āĻĄāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻŦāĻŋāĻāĻļāĻ¨ā§āĻ° REST API āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§ āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻ¨ā§āĻāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨.
āĻŦā§āĻĻā§āĻ§āĻŋāĻŽāĻžāĻ¨
āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻā§āĻ¨, āĻāĻĒāĻ¨āĻŋ āĻ¯ā§ āĻāĻžāĻˇāĻžāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻā§āĻ¨ āĻ¨āĻž āĻā§āĻ¨, Camunda āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻā§āĻŦāĻ āĻ¸āĻšāĻāĨ¤ āĻŽā§āĻ˛ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻ˛ āĻ¯ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŽāĻŋāĻĨāĻ¸ā§āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž REST API āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨āĻāĻŋāĻ āĻŦā§āĻļ āĻ¸āĻšāĻ, āĻŦāĻŋāĻļā§āĻˇ āĻāĻ°ā§ āĻĄāĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com