Выбор ответа Middle Laravel: контейнер и очереди обновлено
Повторы заданий
Вопрос
Задание отправляет письмо через внешний API, который иногда отвечает 503. Как настроить повторы в Laravel?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: $tries и $backoff, метод failed(), а задание сделать идемпотентным. Воркер повторяет упавшее задание до $tries раз с задержками из $backoff, после чего оно попадает в failedjobs, а у задания вызывается failed().
Варианты ответа
- Обернуть вызов в бесконечный
while (true)сsleepмежду попытками - Повторы невозможны: нужно вручную ставить новое задание из
catch - Включить
QUEUE_RETRY=alwaysв.env, и воркер повторит задание $triesи$backoff, методfailed(), а задание сделать идемпотентнымправильный ответ
Разбор
Воркер повторяет упавшее задание до $tries раз с задержками из $backoff, после чего оно попадает в failed_jobs, а у задания вызывается failed(). Можно ограничить временем через retryUntil(). Задание может выполниться больше одного раза (повторы, падение воркера после отправки), поэтому его делают идемпотентным. Бесконечный цикл блокирует воркер, а переменной QUEUE_RETRY не существует.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.