Асинхронный флаг без мистики (2)

Примечание: Этот пост является продолжением предыдущего, так как многие читатели спрашивали, что происходит, когда у асинхронных заданий заканчиваются попытки повторного выполнения.

Обработка неудачных заданий

После того как задание несколько раз завершилось с ошибкой (в зависимости от настроенного количества попыток ), движок больше не будет его выполнять. Вместо этого задание будет перемещено в отдельную таблицу базы данных под названием dead letter table (ACT_RU_DEADLETTER_JOB). Dead letter — это распространённый паттерн в системах обмена сообщениями.

Хранение всех таких заданий в отдельной таблице позволяет легко находить проблемные задания с помощью простого запроса. Кроме того, такое разделение заданий повышает общую производительность движка, так как неудачные задания не нужно фильтровать в запросах асинхронного исполнителя. Эта концепция поддерживается только в релизах Flowable 6.

Реанимация заданий

Главный вопрос — что делать с такими "мертвыми" заданиями. Flowable предоставляет два способа вернуть их к жизни: программно и вручную через интерфейс.

Программно: Flowable предоставляет API для восстановления заданий, см. org.flowable.engine.ManagementService#moveDeadLetterJobToExecutableJob(JobId, retries). В результате выполнения задание возвращается в таблицу активных заданий (ACT_RU_JOB), а количество попыток устанавливается в переданное значение.

Вручную: В Flowable Admin App есть раздел, отображающий текущий список заданий. Справа в фильтре по типу заданий есть опция показать только dead letter задания. После применения фильтра в списке будет отображаться количество оставшихся попыток (ноль) и исключение, по которому задание завершилось с ошибкой:

При нажатии на запись отображается дополнительная информация, а справа — возможные действия. Первое действие, «Переместить задание» (Move job), выведет задание из таблицы dead letter, после чего оно снова будет поставлено в очередь на выполнение. Вторая опция — «Удалить задание» (Delete job), — удалит его, но тогда связанный процесс зависнет и потребуется ручная очистка.

Наиболее подходящее действие зависит от вашего кейса и характера исключения. Flowable предоставляет инструменты и инфраструктуру, но стратегия обработки ошибок полностью определяется требованиями и командой разработки.

Несколько советов:

См. документацию, параметр asyncExecutorNumberOfRetries.

Подписывайтесь на наш телеграм-канал BPM Developers — про бизнес-процессы: новости, гайды, полезная информация и юмор.

@stas_makarov
25.06.2025 11:04 UTC
Первоисточник