Це обгортки навколо handle(), як middleware маршрутів навколо контролера. Вони виносять з завдання повторювану логіку: обмеження, блокування, умови пропуску.
public function middleware(): array
{
return [
new WithoutOverlapping($this->user->id),
new RateLimited('external-api'),
];
}
Вбудовані, які найчастіше потрібні:
WithoutOverlapping- не дає двом завданням з тим самим ключем виконуватися одночасно (оновлення балансу одного користувача).RateLimited- тримає частоту звернень у межах ліміту, оголошеного черезRateLimiter::for(); зайві завдання повертаються в чергу.ThrottlesExceptions- якщо зовнішній сервіс почав падати, перестає його смикати на якийсь час.Skip::when(...)- видаляє завдання без виконання за умовою, наприклад якщо замовлення вже скасоване.
Пастка: повернення в чергу через WithoutOverlapping чи RateLimited теж рахується як спроба. З однією спробою за замовчуванням таке завдання одразу потрапить у failed_jobs - тому для них збільшують #[Tries] або обмежують за часом.