REST рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдЗрдВрдЬрд┐рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЛрдкреНрдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирд╕рд╛рдареА рдХреЕрдореБрдВрдбрд╛ рд╡рд╛рдкрд░рдгреЗ (рдЬрд╛рд╡рд╛ рдирд╛рд╣реА)

рдЕрд╣реЛ рд╣рд╛рдмреНрд░! рд▓реЗрдЦрд╛рдЪрд╛ рдЕрдиреБрд╡рд╛рдж рдореА рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрдгреВрди рджреЗрдд рдЖрд╣реЗ "рдХрдореБрдВрдбрд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕реБрд▓рдн REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдЗрдВрдЬрд┐рди рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд╛ (рдЬрд╛рд╡рд╛рд▓рд╛ рд╕реНрдкрд░реНрд╢ рди рдХрд░рддрд╛)" Bernd R├╝cker рджреНрд╡рд╛рд░реЗ.

07.07.2020/XNUMX/XNUMX, рдЕрдиреБрд╡рд╛рдж рд▓реЗрдЦ рдмрд░реНрдВрдб рд░реБрдХрд░

REST рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдЗрдВрдЬрд┐рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЛрдкреНрдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирд╕рд╛рдареА рдХреЕрдореБрдВрдбрд╛ рд╡рд╛рдкрд░рдгреЗ (рдЬрд╛рд╡рд╛ рдирд╛рд╣реА)

рдореА рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рдЬрд╛рд╡рд╛ рдирд╕рд▓реЗрд▓реНрдпрд╛ рд▓реЛрдХрд╛рдВрд╕реЛрдмрдд рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЛ: C# рд╡рд┐рдХрд╕рдХ, Node.JS/JavaScript рдбреЗрд╡реНрд╣рд▓рдкрд░ рдХрд┐рдВрд╡рд╛ Golang aficionados. рдпрд╛ рд╕рд░реНрд╡рд╛рдВрдирд╛ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ рдХреА рддреНрдпрд╛рдВрдирд╛ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдпрдВрддреНрд░рдгрд╛ рдХрд┐рдВрд╡рд╛ рд╡рд░реНрдХрдлреНрд▓реЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдСрд░реНрдбрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛, рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕, рд╕рд╛рдЧрд╛ рдЖрдгрд┐ рдиреБрдХрд╕рд╛рди рднрд░рдкрд╛рдИрдЪреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рдПрдХ рд╕рд╛рдзрди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд╕рд╣ BPM рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо Camunda рдкрд╛рд╕реВрди рдореБрдХреНрдд рд╕реНрд░реЛрдд рдЕрд╢рд╛ рдХрд╛рдорд╛рдВрд╕рд╛рдареА рдЙрддреНрддрдо. рд╡рд┐рдХрд╕рдХ рдорд┐рддреНрд░рддреНрд╡ рд╣реЗ рдЙрддреНрдкрд╛рджрдирд╛рдЪреНрдпрд╛ рдкреНрд░рдореБрдЦ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ. рдкрд░рдВрддреБ рддреБрдореНрд╣реА рддреНрдпрд╛рдЪреЗ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрджрд╛рдЪрд┐рдд рдЕрд╕реЗ рд╕рдордЬреЗрд▓ рдХреА рдХреЕрдореБрдВрдбрд╛рдЪреА "рдорд┐рддреНрд░рддреНрд╡" рдореБрдЦреНрдпрддрдГ Java рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрд╕рд╛рдареА рдЖрд╣реЗ. рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рддреБрдордЪреА рд╕реНрд╡рддрдГрдЪреА рдХрд╛рд░реНрдпреЗ рдЖрдгрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмрд░реЗрдЪ рдкрд░реНрдпрд╛рдп рдкреНрд░рджрд╛рди рдХрд░рддреЗ, рдкрд░рдВрддреБ рд╣реЗ рд╕рд░реНрд╡ Java рдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдЦрд░рдВрдЪ рдЖрд╣реЗ рдХрд╛?

рдирд╛рд╣реА! рдЦрд░рдВ рддрд░, рддреБрдореНрд╣реА рдЬрд╛рд╡рд╛рдЪреНрдпрд╛ рдЬреНрдЮрд╛рдирд╛рд╢рд┐рд╡рд╛рдп рдХреЕрдореБрдВрдбрд╛ рд╕рд╣рдЬрдкрдгреЗ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рдЖрд╡рдбреАрдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рднрд╛рд╖реЗрдд рдХреЛрдбрд╕рд╛рдареА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛. рдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА рдкрд╛рд╣реВ:

  • рдореВрд▓рднреВрдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░;
  • REST API
  • Java рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд рдЗрддрд░ рднрд╛рд╖рд╛рдВрд╕рд╛рдареА рд╡рд┐рджреНрдпрдорд╛рди рдХреНрд▓рд╛рдпрдВрдЯ рд▓рд╛рдпрдмреНрд░рд░реАрдмрджреНрджрд▓ рд╕рд▓реНрд▓рд╛;
  • рдЙрджрд╛рд╣рд░рдг C# рдЖрдгрд┐ Node.JS рд╡рд╛рдкрд░реВрди;
  • рдХреЕрдореБрдВрдбрд╛ рд╕рд░реНрд╡реНрд╣рд░ (рдбреЙрдХрд░ рдХрд┐рдВрд╡рд╛ рдЯреЙрдордХреЕрдЯ) рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЪреЗ рдорд╛рд░реНрдЧ.

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

Camunda Java рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА Java Virtual Machine (JVM) рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. Camunda рдПрдХ REST API рдкреНрд░рджрд╛рди рдХрд░рддреЗ рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдЖрд╡рдбреАрдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рднрд╛рд╖реЗрдд рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ Camunda рд╕рд╣ REST рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ:

REST рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдЗрдВрдЬрд┐рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЛрдкреНрдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирд╕рд╛рдареА рдХреЕрдореБрдВрдбрд╛ рд╡рд╛рдкрд░рдгреЗ (рдЬрд╛рд╡рд╛ рдирд╛рд╣реА)

Camunda рдордзреАрд▓ рд╡рд░реНрдХрдлреНрд▓реЛ BPMN рдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд, рдЬреА рдореБрд│рд╛рдд XML рдлрд╛рдЗрд▓ рдЖрд╣реЗ. рддреЗ рдореЙрдбреЗрд▓ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдХреЕрдореБрдВрдбрд╛ рдореЙрдбреЗрд▓рд░.

рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдбреЙрдХрд░ рдкреНрд░рддрд┐рдореЗрджреНрд╡рд╛рд░реЗ рдХреЕрдореБрдВрдбрд╛ рдЪрд╛рд▓рд╡рдгреЗ

рдХреЕрдореБрдВрдбрд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рдбреЙрдХрд░ рд╡рд╛рдкрд░рдгреЗ. рдХреЕрдореБрдВрдбрд╛ рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рдЪреЗ рдкрд░реНрдпрд╛рдпреА рдорд╛рд░реНрдЧ рдпрд╛ рд▓реЗрдЦрд╛рдд рдирдВрддрд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗрдд.

REST рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдЗрдВрдЬрд┐рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЛрдкреНрдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирд╕рд╛рдареА рдХреЕрдореБрдВрдбрд╛ рд╡рд╛рдкрд░рдгреЗ (рдЬрд╛рд╡рд╛ рдирд╛рд╣реА)

рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдлрдХреНрдд рдЪрд╛рд▓рд╡рд╛:

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

рддреБрдореНрд╣рд╛рд▓рд╛ Linux, JVMs рдХрд┐рдВрд╡рд╛ Tomcats рдмрджреНрджрд▓ рдХрд╛рд│рдЬреА рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рдбреЙрдХрд░рдлрд╛рдИрд▓реНрд╕ рдЖрдгрд┐ рдореВрд▓рднреВрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реВрдЪрдирд╛) рдпреЗрдереЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд рдЬрд┐рдереВрдм.

рддреБрдореНрд╣рд╛рд▓рд╛ Camunda Enterprise Edition рдЪрд╛рд▓рд╡рд╛рдпрдЪреА рдЕрд╕рд▓реНрдпрд╛рд╕ рддреБрдореНрд╣реА рд╕рд╣рдЬ рдмрджрд▓ рдХрд░реВ рд╢рдХрддрд╛ рдбреЙрдХрд░рдлрд╛рдЗрд▓.

рддрдерд╛рдкрд┐, рдбреЙрдХрд░рд╕рд╣ рдХреЕрдореБрдВрдбрд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдордзреНрдпреЗ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрд╛рдЬреВ рдЖрд╣реЗ: рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЙрдордХреЕрдЯрдЪреА рдЖрд╡реГрддреНрддреА рдорд┐рд│реЗрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рдиреЗрд╣рдореАрдЪ рдирд╡реАрдирддрдо рдирд┐рд░рд╛рдХрд░рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдирд╕рддрд╛рдд. рдпрд╛рд╡рд░ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЖрдкрдг рдЗрдЪреНрдЫрд┐рдд рдЯреЙрдордХреЕрдЯ рд╡рд┐рддрд░рдгрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрдкрд▓реА рд╕реНрд╡рддрдГрдЪреА рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рдЦрд╛рд▓реА рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЙрдкрд╛рдпрд╛рдВрдкреИрдХреА рдПрдХ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЙрдбреЗрд▓ рдЙрдкрдпреЛрдЬрди

рдХреНрд▓рд╛рд╕рд┐рдХ рдЯреНрд░рд┐рдк рдмреБрдХрд┐рдВрдЧрд╕рд╛рдареА рд╕рд╛рдЧрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡рд╛рдкрд░реВрди рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ рдЬрд┐рдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд▓рдЧ рддреАрди рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХрд░рд╛рдпрдЪреНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рдирдВрддрд░рдЪреНрдпрд╛ рдЕрдкрдпрд╢рд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдпрд╢рд╕реНрд╡реАрд░реАрддреНрдпрд╛ рдкреВрд░реНрдг рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреГрддреАрдВрдЪреА рднрд░рдкрд╛рдИ рдХрд░рд╛. BPMN рдлреЙрд░реНрдордордзреНрдпреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗрд▓реЗрд▓реЗ, рддреЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

REST рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдЗрдВрдЬрд┐рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЛрдкреНрдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирд╕рд╛рдареА рдХреЕрдореБрдВрдбрд╛ рд╡рд╛рдкрд░рдгреЗ (рдЬрд╛рд╡рд╛ рдирд╛рд╣реА)

рдЖрддрд╛ рддреБрдореНрд╣реА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЙрдбреЗрд▓ рдЙрдкрдпреЛрдЬрдирд╛рд╕рд╛рдареА REST API. рд╕рдордЬрд╛ рддреБрдореНрд╣реА рддреЗ trip.bpmn рдореНрд╣рдгреВрди рд╕реЗрд╡реНрд╣ рдХрд░рд╛ рдЖрдгрд┐ Docker рджреНрд╡рд╛рд░реЗ Camunda рдЪрд╛рд▓рд╡рд╛ рдореНрд╣рдгрдЬреЗ рддреЗ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: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

рдкреБрдвреАрд▓ рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рд╢реНрди рдЖрд╣реЗ: рдХреЕрдореБрдВрдбрд╛ рдХрд╛рд░ рдмреБрдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕ рдХрд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ? рдХрд╛рдореБрдВрдбрд╛ рдХрд╛рд╣реА рдЕрдВрдЧрднреВрдд рд╡рд╛рдкрд░реВрди рд╕реЗрд╡рд╛рдВрдирд╛ рддрд╛рддреНрдХрд╛рд│ рдХреЙрд▓ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА (рдкреБрд╢-рдкреНрд░рд┐рдиреНрд╕рд┐рдкрд▓). рдХрдиреЗрдХреНрдЯрд░, рдкрд░рдВрддреБ рдХрд╛рдорд╛рдЪреНрдпрд╛ рд╡рд╕реНрддреВ рдПрдХрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдЕрдВрдЧрднреВрдд рдХреНрд░рдорд╛рдиреЗ рдареЗрд╡рддрд╛рдд. рддреНрдпрд╛рдирдВрддрд░ рдХрд╛рдордЧрд╛рд░ REST рджреНрд╡рд╛рд░реЗ рдХрд╛рдорд╛рдЪреНрдпрд╛ рд╡рд╕реНрддреВ рдЖрдгреВ рд╢рдХрддреЛ, рдХрд╛рдо рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рдХрдордВрдбрд╛рд▓рд╛ рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧреВ рд╢рдХрддреЛ (рдкреБрд▓-рдкреНрд░рд┐рдиреНрд╕рд┐рдкрд▓).

REST рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдЗрдВрдЬрд┐рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЛрдкреНрдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирд╕рд╛рдареА рдХреЕрдореБрдВрдбрд╛ рд╡рд╛рдкрд░рдгреЗ (рдЬрд╛рд╡рд╛ рдирд╛рд╣реА)

рдореНрд╣рдгреВрди рдкреНрд░рдердо рдЖрдкрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ 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

рдордЧ рдХрдордВрдбрд╛рд▓рд╛ рддреЗ рд╕рд╛рдВрдЧ рдХрд╛рдордЧрд╛рд░рд╛рдиреЗ рдХрд╛рдо рдкреВрд░реНрдг рдХреЗрд▓реЗ (рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рддреБрдореНрд╣реА рдкрд╣рд┐рд▓реНрдпрд╛ рд╡рд┐рдирдВрддреАрдордзреНрдпреЗ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓рд╛ рдмрд╛рд╣реНрдп рдХрд╛рд░реНрдп рдЖрдпрдбреА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ):

  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();

рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреА рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░ рдорд┐рд│реВ рд╢рдХрддреЗ Github.com

рдХреЕрдореБрдВрдбрд╛ рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рдЪреЗ рдкрд░реНрдпрд╛рдпреА рдорд╛рд░реНрдЧ

"рдХрдореБрдВрдбрд╛ рд╕реНрдЯрдБрдбрдЕрд▓реЛрди рд╡реЙрд░" рд╕рд╣ рд╕рд╛рдиреБрдХреВрд▓ рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛

Camunda рдордзреАрд▓ рдкреНрд░реА-рдмрд┐рд▓реНрдЯ рдбреЙрдХрд░ рдЗрдореЗрдЬрд▓рд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгреВрди, рддреБрдореНрд╣реА рдЯреЙрдордХреЕрдЯ рд╕реНрд╡рдд: рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЕрдзрд┐рдХреГрдд рдбреЙрдХрд░ рдЯреЙрдордХреЕрдЯ рдкреНрд░рддрд┐рдорд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд) рдЖрдгрд┐ рдирдВрддрд░ рддрдерд╛рдХрдерд┐рдд WAR рдлрд╛рдпрд▓реАрдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгреВрди Camunda рдХреЙрдкреА рдХрд░реВ рд╢рдХрддрд╛.

REST рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдЗрдВрдЬрд┐рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЛрдкреНрдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирд╕рд╛рдареА рдХреЕрдореБрдВрдбрд╛ рд╡рд╛рдкрд░рдгреЗ (рдЬрд╛рд╡рд╛ рдирд╛рд╣реА)

рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЕрдиреЗрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдгрд┐ Java рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░реВ рд╢рдХрдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА Camunda рд╕реНрдЯрдБрдбрдЕрд▓реЛрди рдпреБрджреНрдз рджреЗрдЦреАрд▓ рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛. рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдкреНрд░рдорд╛рдгреЗ рдорд╛рд╡реЗрди рдмрд┐рд▓реНрдб рд╕реЗрдЯ рдХрд░рд╛: рдмрд┐рд▓реНрдб рдпреБрджреНрдз рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╣ рдорд╛рд╡реЗрди рдХрд┐рдВрд╡рд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЖрдЪреНрдЫрд╛рджрди рд╕рд╣ Maven.

Camunda Tomcat рд╡рд┐рддрд░рдг рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЗ

рджреБрд╕рд░рд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгрдЬреЗ рдХреЕрдореБрдВрдбрд╛ рдЯреЙрдордХреЕрдЯ рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ, рддреЗ рдЕрдирдЭрд┐рдк рдХрд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рд▓рд╡рдгреЗ. рдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рддреБрдордЪреНрдпрд╛ рд╕рдВрдЧрдгрдХрд╛рд╡рд░ Java Runtime Environment (JRE) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреЗ рд╕рд╣рдЬ рдЕрд╕реВ рд╢рдХрддреЗ рдпреЗрдереВрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛.

REST рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛ рдЗрдВрдЬрд┐рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЛрдкреНрдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирд╕рд╛рдареА рдХреЕрдореБрдВрдбрд╛ рд╡рд╛рдкрд░рдгреЗ (рдЬрд╛рд╡рд╛ рдирд╛рд╣реА)

рдбреЗрдЯрд╛рдмреЗрд╕ рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХрд╛рд╣реАрд╣реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЙрдордХреЕрдЯ рд╕рд╛рд░рдЦреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдд рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рдорд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА рдЯреЙрдордХреЕрдЯ рдХреНрд▓рд┐рд╖реНрдЯ рд╡рд╛рдЯреВ рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рддреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рдЖрдгрд┐ рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрдЪреА рдЙрддреНрддрд░реЗ Google рд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗрдд.

рдЯреЙрдордХреЕрдЯ рд╡рд╛рдкрд░реВрди рдХреЕрдореБрдВрдбрд╛ рдЪрд╛рд▓рд╡рдгреЗ

рд╢реЗрд╡рдЯрдЪрд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгрдЬреЗ рдЯреЙрдордХреЕрдЯ рд╕реНрд╡рддрдГ рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдд рдХреЕрдореБрдВрдбрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ, рдкреНрд░рддрд┐рд╖реНрдард╛рдкрди рд╡рд░реНрдгрди рдЦрд╛рд▓реАрд▓. рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЙрдордХреЕрдЯрдЪреА рддреБрдореНтАНрд╣реА рдкрд╕рдВрддреАрдЪреА рдХреЛрдгрддреНтАНрдпрд╛рд╣реА рдЖрд╡реГрддреНрддреАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреНтАНрдпрд╛рдЪрд╛ рдкрд░реНрдпрд╛рдп рджреЗрдИрд▓ рдХрд┐рдВрд╡рд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, Windows рд╕реЗрд╡рд╛ рдореНтАНрд╣рдгреВрди рд╕реНтАНрдерд╛рдкрд┐рдд рдХрд░рдгреНтАНрдпрд╛рдЪрд╛ рдкрд░реНрдпрд╛рдп рджреЗрдИрд▓.

рдХрдордВрдбрд╛рдЪреЗ рдЙрддреНрдкрд╛рджрди рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЗ

Camunda рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛рд╕ рд╕рд╣рд╕рд╛ рдХрд╛рд╣реА рдЕрдВрддрд┐рдо рд╕реЗрдЯрдЕрдк рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓. рдХреЕрдореБрдВрдбрд╛рдордзреНрдпреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рддрддреНрддреНрд╡реЗ рдЖрд╣реЗрдд рдЬреА рдпрд╛рдЪреЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд, рдкрд░рдВрддреБ рдореА рдпрд╛ рд▓реЗрдЦрд╛рдд рддреНрдпрд╛рдордзреНрдпреЗ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА - рдореА рдлрдХреНрдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдИрди: рд╡рд┐рддрд░рдгрд╛рдЪреЗ REST API рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА. рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдмрджрд▓рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓.

рдЧреЛрд│рд╛ рдХрд░реАрдд рдЖрд╣реЗ

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рддреБрдореНрд╣реА рдХреЛрдгрддреА рднрд╛рд╖рд╛ рд╡рд╛рдкрд░рдд рдЖрд╣рд╛рдд рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛, Camunda рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рд╕рд░реНрд╡ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж REST API рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рд╡рд┐рд╢реЗрд╖рдд: рдбреЙрдХрд░ рд╡рд╛рдкрд░рддрд╛рдирд╛, рд╕реНрдерд╛рдкрдирд╛ рджреЗрдЦреАрд▓ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛