Выбор ответа Middle Laravel: контейнер и очереди обновлено

Повторы заданий

Вопрос

Задание отправляет письмо через внешний API, который иногда отвечает 503. Как настроить повторы в Laravel?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: $tries и $backoff, метод failed(), а задание сделать идемпотентным. Воркер повторяет упавшее задание до $tries раз с задержками из $backoff, после чего оно попадает в failedjobs, а у задания вызывается failed().

Варианты ответа

  1. Обернуть вызов в бесконечный while (true) с sleep между попытками
  2. Повторы невозможны: нужно вручную ставить новое задание из catch
  3. Включить QUEUE_RETRY=always в .env, и воркер повторит задание
  4. $tries и $backoff, метод failed(), а задание сделать идемпотентнымправильный ответ

Разбор

Воркер повторяет упавшее задание до $tries раз с задержками из $backoff, после чего оно попадает в failed_jobs, а у задания вызывается failed(). Можно ограничить временем через retryUntil(). Задание может выполниться больше одного раза (повторы, падение воркера после отправки), поэтому его делают идемпотентным. Бесконечный цикл блокирует воркер, а переменной QUEUE_RETRY не существует.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.