рдЯрд┐рдВрдХрдСрдлрд╝ рдореЗрдВ
, рд╣рдо рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рди рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ + рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рд╣рдо рдлреНрд▓реЛрдЪрд╛рд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ BPMN (рдмрд┐рдЬрдиреЗрд╕ рдкреНрд░реЛрд╕реЗрд╕ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдиреЛрдЯреЗрд╢рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ редрд╣рдорд╛рд░реЗ рдЖрд░реЗрдЦреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рддрддреНрд╡ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдп (рдЧрд┐рдпрд░ рдЖрдпрдд) рд╣реИред рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ рджреЛ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ :- рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
- рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ред
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдХреИрдореБрдбрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдпрд╛ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрд╛рдо рд╕реМрдВрдкрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг BPMN рдЖрд░реЗрдЦрдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдк рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╛ рдЬрдм рдЖрдк microservice рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрдХрдиреАрдХреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛, рдЬреИрд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдирд╛ рдпрд╛ рдореЗрд▓ рдХрд░рдирд╛редрдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде, рдПрдХ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдПрдХ рд╕реНрдХреЗрд▓реЗрдмрд▓, рд▓рдЪреАрд▓рд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдмреАрдкреАрдПрдордПрди рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрддрд░реЛрдВ рдкрд░ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИредрдмреАрдкреАрдПрдордПрди рдореЗрдВ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп
рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рд╣рд░реА рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдкреИрдЯрд░реНрди рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐:- , ┬л┬╗ , ┬л┬╗.
- camunda , , .
- camunda (/).
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ 2 рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж рд╡рд┐рдкрдгрди рд╕рдорд╛рдЪрд╛рд░ рдкрддреНрд░ рдХреЗ рдмрд╛рдж рдЖрд╡реЗрджрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдФрд░, рдпрджрд┐ 10 рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ, рддреЛ рдЕрдЧрд▓реЗ рдореЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЪрдпрди рдмрдврд╝рд╛рдПрдВредрдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдХреИрдореБрдВрдбрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗрд╡рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛ , рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдИрдореЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдкреИрдЯрд░реНрди рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдмрд╕ рдПрдХ рдИрдореЗрд▓ рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░ рдХрд╛рд░реНрдп рдмрдирд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реВрдБрдЧрд╛редрдЖрд░реЗрдЦ рдореЗрдВ рдПрдХ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:- рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рдмрдирд╛рдПрдБ ред
- рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдп рдореЗрдВ рдмрджрд▓реЗрдВ ред
- рдмрд╛рд╣рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗрдЯ рдХрд░реЗрдВ ред
- рд╡рд┐рд╖рдп рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ ред
рдЯреЙрдкрд┐рдХ рдХрддрд╛рд░ рдХрд╛ рдирд╛рдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрд╛рд╣рд░реА рд╣реИрдВрдбрд▓рд░ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдЧрд╛редрдЕрдм рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЛрдИ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рд╣реИ , рддреЛ рдЖрдк рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИредрдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдХрд░реНрдореА
рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп
рдкреИрдЯрд░реНрди рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдЯрд╛рд╕реНрдХ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ HTTP рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ редрдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреИрдореБрдВрдбрд╛ рдмреНрд▓реЙрдЧ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ ред рдЙрджрд╛рд╣рд░рдг рдПрдХ рдмрд╛рд╣рд░реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╣рд░ 20 рд╕реЗрдХрдВрдб рдореЗрдВ, рдХреИрдордХреБрдВрдбрд╛ рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ ред рдпрджрд┐ рдХрд╛рд░реНрдп рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрдВрдХреБрдВрдбрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ редconst baseUrl = 'http://localhost:8080/my-app/rest';
const workerSettings = {
workerId: 'worker01',
maxTasks: 5,
topics: [
{
topicName: 'sendEmail',
lockDuration: 10000,
variables: ['video']
}]};
const requestParams = {method: 'POST', headers: {contentType: 'application/json'}};
function pollExternalTasks() {
return fetch(`${baseUrl}/external-task/fetchAndLock`, {
...requestParams,
body: JSON.stringify(workerSettings)
})
}
function processExternalTask(result = []) {
return Promise.all(result.map(externalTask => {
sendEmail(externalTask);
return fetch(`${baseUrl}/external-task/${externalTask.id}/complete`, {
...requestParams,
body: JSON.stringify({workerId: workerSettings.workerId}),
})
}));
}
setInterval(() => {
pollExternalTasks().then(processExternalTask)
}, 20000);
рдЖрдк рдКрдкрд░ рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рддрд░реАрдХреЛрдВ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рд╣реИрдВ fetchAndLock рдФрд░ рдкреВрд░рд╛ ред рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрди рджреЛ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреНрдп рднреА рд╣реИрдВ, рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ редрдХреИрдордВрдбрд╛ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдХреНрд▓рд╛рдЗрдВрдЯ
рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреИрдордХреБрдВрдбрд╛ рдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬреЛ рдЖрдкрдХреЛ рдХреБрдЫ рд╣реА рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЧрд╛рдЗрдб рднреА рд╣реИ рдЬреЛ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ - рдлрд┐рд░ рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде редрдПрдХ рдмрд╛рд╣рд░реА рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ ExternalTaskClient :public class App {
public static void main(String... args) {
ExternalTaskClient client = ExternalTaskClient.create()
.baseUrl("http://localhost:8080/engine-rest")
.asyncResponseTimeout(1000)
.build();
client.subscribe("sendEmail").handler((externalTask, externalTaskService) -> {
try {
String result = sendEmail(externalTask)
Map<String, Object> variables = new HashMap<>();
variables.put("result", result);
externalTaskService.complete(externalTask, variables);
System.out.println("The External Task " + externalTask.getId() + " has been completed!");
} catch (e: Exception) {
externalTaskService.handleFailure(externalTask, e.message, e.stackTrace.toString())
}
}).open();
}
}
рдпрджрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рдордХрд╛рд▓рд┐рдХ рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдирдЯрд╛рдЗрдорд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдХреЗ :@Service
class EmailWorker(
private val runtimeService: RuntimeService
) {
val builder = ExternalTaskClientBuilderImpl().baseUrl("http://localhost:8080").workerId("myWorker")
val taskClient = builder.build()
val engineClient = (builder as ExternalTaskClientBuilderImpl).engineClient
@PostConstruct
fun init() {
taskClient
.subscribe("sendEmail")
.lockDuration(10000)
.handler { externalTask, externalService ->
runtimeService.startProcessInstanceByKey(
"SendEmailProcess",
externalTask.getVariable("emailId"),
mapOf(
"text" to externalTask.getVariable("text"),
"email" to externalTask.getVariable("email")
)
)
}
.open()
}
@PreDestroy
fun destroy() {
taskClient.stop()
}
}
@Component
class EmailResultDelegate(private val emailWorker: EmailWorker) {
fun doExecute(execution: DelegateExecution) {
emailWorker.engineClient.complete(
execution.readVar(EXTERNAL_TASK_ID),
mapOf("result" to "Success")
)
}
}
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рд╣реИрдВрдбрд▓рд░ ( EmailWorker ) SendEmailProcess рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ редрдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╕рдорд╛рдЪрд╛рд░ рдкрддреНрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддреА рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ EmailResultDelegate , рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ редрдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдХреЗ рд╡рд╛рд╕реНрддреБ рд▓рд╛рдн
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдХ рдФрд░ рдХреИрдореБрдВрдбрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ: POST: / rest / process-definition / key / $ {id} / startрдЬрдм рдЖрдк REST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд▓реЗрди-рджреЗрди рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо REST рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рднреА рдХрд░рддреЗ рд╣реИрдВ , рдлрд┐рд░ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдХреБрдЫ рдмрд╛рд╣рд░реА рд╣реИрдВрдбрд▓рд░ рдПрдХ рдХрд╛рд░реНрдп рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдм рдЙрд╕реЗ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рдХрдиреЗрдХреНрд╢рди рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдХреИрдордХреБрдВрдбрд╛ рдХреА рддрд░рдл
рдПрдХ рдХрд╛рд░реНрдп рдЬрд┐рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЙрд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рд╣рд░реА рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реАред рд▓реЗрдХрд┐рди рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ: рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрдВрдХреБрдВрдбрд╛ рдореЗрдВ рдПрдХ рд╕рдордпрдмрд╛рд╣реНрдп рд╣реИ рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдп рдлрд┐рд░ рд╕реЗ рдХрддрд╛рд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдЖрдЗрдП рдорд╛рдорд▓реЗ рдХреЛ рджреЗрдЦреЗрдВ рдЬрдм рдПрдХ рдмрд╛рд╣рд░реА рд╣реИрдВрдбрд▓рд░ рдиреЗ рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛, рдЙрд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛, рдФрд░ рдкреВрд░реНрдг рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ , рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд░рд╣рд╛ред рдЕрдм рдЖрдк рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖ рдерд╛ рдпрд╛ рдирд╣реАрдВред рдЖрдк рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдмрдиреА рд░рд╣реЗрдВрдЧреАредрдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╕рдорд╕реНрдпрд╛ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдХрд╛рд░реНрдп рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдп рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдмрд╛рд╣рд░реА рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмреЗрд░реЛрдЬрдЧрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПредрдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП businessKey редрдЙрдЪреНрдЪ рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд╛рд╣рд░реА рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдкреИрдЯрд░реНрди рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдирдХреА рд╕реНрдерд┐рд░рддрд╛ рдмрдврд╝реЗред рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдХреЗрдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА : https://docs.camunda.org/manual/latest/user-guide/process-engine/external-tasks/ https://docs.camunda.org/manual/latest/reference/rest=exex -task / https://docs.camunda.org/manual/latest/user-guide/ext-client/