В Laravel есть встроенный способ защититься от дублирующихся задач в очередях — интерфейс
ShouldBeUnique.Достаточно реализовать метод
uniqueId() и вернуть уникальный идентификатор задачи:class SyncUser implements ShouldQueue, ShouldBeUnique
{
public function uniqueId(): string
{
return $this->userId;
}
}
Если задача с таким идентификатором уже находится в очереди, Laravel не поставит её повторно.
Меньше ручных проверок, меньше блокировок и меньше гонок данных. Особенно полезно для синхронизации пользователей, обработки вебхуков и фоновых задач, которые могут запускаться несколько раз подряд.
@WebDev_Plus
