mxl/laravel-queue-rate-limit
mxl/laravel-queue-rate-limit lets you throttle Laravel queue jobs per queue, capping how many are processed in a given time window. Configure limits in your queue config to protect external APIs and downstream services from job bursts.
queue:work --stop-when-empty previously exited while jobs were still pending behind a rate-limit window. For a PM, that translates directly into "did my batch job actually finish?" — which affects SLA commitments, nightly report delivery, and whether you can safely run ephemeral workers (Kubernetes Jobs, Fargate tasks, CI runners) instead of always-on daemons.Adopt when:
--stop-when-empty is part of the execution contract (batch containers, cron-triggered workers, CI pipelines).release()/sleep() loops inside jobs to handle throttling — that's the signal you're reinventing this.Look elsewhere or defer when:
--stop-when-empty is never used. The specific value here is narrow.For executives: A maintenance release that closes a reliability gap in how background jobs handle third-party rate limits. The practical impact is that scheduled and batch workloads now terminate only when the work is genuinely done, rather than silently exiting early and leaving jobs stranded. That reduces the class of "the report just didn't send" incidents and makes short-lived, cost-efficient worker infrastructure viable.
For engineering: --stop-when-empty no longer races with rate-limit backpressure. Workers now wait for the nearest window and retry when the queue is non-empty, while preserving existing semantics for truly empty queues and multi-queue processing order. Three new regression tests lock in the behavior across rate-limited pending, empty, and multi-queue scenarios.
For the PM's own roadmap note: This is a low-drama, high-leverage update. No breaking changes, no migration work. The reason to act on it is that the bug it fixes is one of those quiet failure modes that surfaces as a missed deadline rather than a stack trace — worth upgrading on your next scheduled dependency bump rather than waiting for an incident to justify it.
How can I help you explore Laravel packages today?