Слушатель события в очереди не находит в базе только что созданный заказ
DB::transaction(function () use ($data) {
$order = Order::create($data);
OrderPlaced::dispatch($order); // слушатель реализует ShouldQueue
$this->reserveStock($order); // ещё несколько секунд
});
Слушатель, выполняемый воркером очереди, иногда падает: заказ не найден. Как исправить?
- Обрабатывать событие после коммита транзакции
- Добавить sleep(5) в начало слушателя
- Вынести dispatch до начала транзакции
- Сделать слушатель синхронным
