Ответ вслух Senior Laravel: контейнер и очереди обновлено

Очереди в Laravel на практике

Вопрос

Как вы используете очереди в Laravel и с какими проблемами сталкивались?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

В очередь выношу всё, что не обязано выполниться до ответа пользователю: письма, уведомления, вызовы внешних API, генерацию отчётов, обработку загруженных файлов. Обычно это Redis с Horizon: видно очереди, время выполнения, ошибки.

Что должно прозвучать в ответе

  • Что выносить: письма, внешние API, отчёты, обработка файлов

  • Redis и Horizon, отдельные очереди по приоритетам

  • Идемпотентность и повторы с backoff, failed_jobs и алерты

  • afterCommit и SerializesModels: свежие данные, отсутствие записи

  • Перезапуск воркеров после деплоя, утечки памяти, --max-jobs и --max-time

  • Уникальные задания и блокировки против дублей

Что могут спросить следом

  • Что будет, если воркер упадёт посреди задания?
  • Как не отправить письмо дважды?

Разбор

В очередь выношу всё, что не обязано выполниться до ответа пользователю: письма, уведомления, вызовы внешних API, генерацию отчётов, обработку загруженных файлов. Обычно это Redis с Horizon: видно очереди, время выполнения, ошибки. Для срочного и медленного заводлю разные очереди, чтобы отчёт на десять минут не задерживал письма.

Главное правило: задание может выполниться больше одного раза. Воркер может упасть после отправки письма, но до подтверждения. Поэтому задания делаю идемпотентными, например проверяю флаг «уже отправлено» или использую ключ идемпотентности у платёжного API. Повторы настраиваю через $tries и $backoff, а упавшие окончательно попадают в failed_jobs и в алерты.

Из типичных граблей: задание, поставленное внутри транзакции, выполнилось раньше коммита и не нашло запись, лечится afterCommit. Воркеры это долгоживущие процессы, после деплоя их перезапускаю queue:restart, а против утечек памяти задаю --max-jobs и --max-time.

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

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