Вступить в клуб →
средняявопросКэш, очереди и фоновые задачи

Задача в очереди получила снимок данных вместо идентификатора

Начисление бонусов ставится в очередь так:

dispatch(new RecalculateBonuses([
    'order_id' => $order->id,
    'total'    => $order->total,   // снимок суммы на момент постановки
    'status'   => $order->status,
]));

В часы пик очередь разгребается с задержкой 10–15 минут. За это время заказ могут отредактировать или отменить. Бухгалтерия находит начисления по отменённым заказам и по устаревшим суммам.

Что верно?

  • Достаточно добавить воркеров: если очередь разгребается за секунды, расхождение данных перестаёт возникать вовсе
  • Нужно передавать в задачу сам объект заказа целиком — при десериализации его свойства всегда окажутся актуальными
  • Задача должна получать идентификатор и перечитывать состояние заказа в момент выполнения, проверяя статус и предусловия
  • Проблема решается постановкой задачи внутри той же транзакции, в которой создаётся заказ: тогда данные согласованы

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела