Для этого надо использовать middleware для job. Я не знаю в какой версии оно появилось.
Метод
middleware() добавляется в нужный Job
public function middleware()
{
return [
new LimitJobThrottleMiddleware
];
}
сам middleware выглядит так...
class LimitJobThrottleMiddleware
{
public function handle($job, $next)
{
Redis::throttle('throttle:sync')
->allow(10) // Разрешено максимум 10 тасков
->every(1) // каждую секунду
->then(fn() => $next($job), fn() => $job->release());
}
}
Важно! throttle:sync - должен быть уникальный. Все что превышает ограничение отправляется снова в очередь и ждет когда можно будет.