Перейти до основного вмісту
Версія: 2.0

Події

Події життєвого циклу надсилаються на ключових етапах виконання workflow й activity, щоб повідомляти застосунок про поступ, завершення чи збої. Це стандартні події Laravel. Реєструйте слухачі в EventServiceProvider або через Event::listen().

Усі події життєвого циклу V2 надсилаються після фіксації стійкого стану в базі даних. Слухачі бачать лише події, підтверджені зафіксованими фактами. Якщо транзакція відкочується, подія не надсилається.

Ідентичність подій​

Кожна подія V2 містить поля стійкої ідентичності:

ПолеОпис
instanceIdID екземпляра workflow, стабільний між continue-as-new.
runIdID конкретного запуску виконання.
workflowTypeСтійкий ключ типу, зареєстрований через #[Type('...')].
workflowClassНазва PHP-класу workflow.
committedAtЧасова позначка ISO 8601 фіксації стійкого запису: реальний час фіксації.

Події activity додатково містять:

ПолеОпис
activityExecutionIdСтійкий ID виконання activity.
activityTypeСтійкий ключ типу activity.
activityClassНазва PHP-класу activity.
sequenceПозиція activity у виконанні workflow.
attemptNumberНомер спроби, починається з 1.

Події workflow​

WorkflowStarted​

Надсилається після стійкої фіксації запуску workflow: перший запуск створено та подію історії WorkflowStarted записано.

use Workflow\V2\Events\WorkflowStarted;

Event::listen(WorkflowStarted::class, function (WorkflowStarted $event) {
Log::info('Workflow started', [
'instance_id' => $event->instanceId,
'run_id' => $event->runId,
'type' => $event->workflowType,
]);
});

Ця подія також спрацьовує, коли новий запуск починається через continue-as-new.

WorkflowCompleted​

Надсилається після успішного завершення запуску workflow.

use Workflow\V2\Events\WorkflowCompleted;

Event::listen(WorkflowCompleted::class, function (WorkflowCompleted $event) {
Log::info('Workflow completed', [
'instance_id' => $event->instanceId,
'run_id' => $event->runId,
]);
});

WorkflowFailed​

Надсилається, коли запуск workflow остаточно завершується з помилкою.

Додаткові поля:

  • exceptionClass: назва PHP-класу винятку.
  • message: повідомлення винятку.
use Workflow\V2\Events\WorkflowFailed;

Event::listen(WorkflowFailed::class, function (WorkflowFailed $event) {
Log::error('Workflow failed', [
'instance_id' => $event->instanceId,
'exception' => $event->exceptionClass,
'message' => $event->message,
]);
});

Події activity​

ActivityStarted​

Надсилається, коли завдання activity отримано та виконання починається.

use Workflow\V2\Events\ActivityStarted;

Event::listen(ActivityStarted::class, function (ActivityStarted $event) {
Log::info('Activity started', [
'activity' => $event->activityType,
'sequence' => $event->sequence,
'attempt' => $event->attemptNumber,
]);
});

ActivityCompleted​

Надсилається після успішного завершення activity.

use Workflow\V2\Events\ActivityCompleted;

Event::listen(ActivityCompleted::class, function (ActivityCompleted $event) {
Log::info('Activity completed', [
'activity' => $event->activityType,
'execution_id' => $event->activityExecutionId,
]);
});

ActivityFailed​

Надсилається після остаточної помилки activity: усі повторні спроби вичерпано або виняток не допускає повторення. Помилки, після яких буде повторна спроба, не спричиняють цю подію.

Додаткові поля:

  • exceptionClass: назва PHP-класу винятку.
  • message: повідомлення винятку.
use Workflow\V2\Events\ActivityFailed;

Event::listen(ActivityFailed::class, function (ActivityFailed $event) {
Log::error('Activity failed', [
'activity' => $event->activityType,
'exception' => $event->exceptionClass,
'message' => $event->message,
]);
});

Події помилок​

FailureRecorded​

Надсилається щоразу під час фіксації стійкого запису помилки, як для остаточних помилок workflow, так і activity. Це єдина точка інтеграції для повідомлень про помилки, наприклад Sentry чи Bugsnag.

ПолеОпис
failureIdID стійкого запису помилки.
sourceKind"workflow_run" або "activity_execution".
sourceIdID джерела: ID запуску чи виконання activity.
exceptionClassНазва PHP-класу винятку.
messageПовідомлення винятку.
use Workflow\V2\Events\FailureRecorded;

Event::listen(FailureRecorded::class, function (FailureRecorded $event) {
// Report to Sentry, Bugsnag, etc.
report(new \RuntimeException(
"[{$event->sourceKind}] {$event->exceptionClass}: {$event->message}"
));
});

Семантика часових позначок​

Поле committedAt усіх подій означає час фіксації: реальний час запису стійкого запису (події історії чи запису помилки) до бази даних. Він відрізняється від:

  • Віртуального часу workflow: логічного часу всередині виконання workflow, який використовують timer.
  • Часу спроби: коли конкретна спроба activity почалася чи завершилася.
  • Затримки відновлення: скільки часу минуло після запланованого спрацювання timer до фактичного продовження workflow.

Час фіксації найкорисніший для зовнішніх інтеграцій, бо відображає момент, коли стан став стійким і доступним для спостереження.

Життєвий цикл​

Типовий життєвий цикл успішного workflow:

Workflow\V2\Events\WorkflowStarted
Workflow\V2\Events\ActivityStarted
Workflow\V2\Events\ActivityCompleted
Workflow\V2\Events\WorkflowCompleted

Життєвий цикл workflow з остаточною помилкою activity:

Workflow\V2\Events\WorkflowStarted
Workflow\V2\Events\ActivityStarted
Workflow\V2\Events\ActivityFailed
Workflow\V2\Events\FailureRecorded (source: activity_execution)
Workflow\V2\Events\WorkflowFailed
Workflow\V2\Events\FailureRecorded (source: workflow_run)

Простір імен подій​

Події V2 розміщено в просторі імен Workflow\V2\Events. Якщо оновлюєте наявний застосунок, дивіться міграцію для зіставлення сумісних подій V1.