jeffersongoncalves/laravel-queue-consumer
A Laravel package for consuming queued jobs, providing a straightforward queue consumer that processes background tasks and integrates with Laravel's existing queue system. It helps keep application workloads moving smoothly with less custom queue plumbing.
WithoutOverlapping, RateLimited, ThrottlesExceptions, or an explicit $this->release(60) were executed, released, exited 0, and then dropped by the hub with no exception, no failed-job record, and no log line. For any product surface backed by queues (billing, notifications, webhooks, imports), this is the difference between "we retry" and "we lose the work and never know." Use it to justify prioritising consumer-side reliability work over new queue features.release($delay)) are where throttling middleware actually earns its keep. Before 1.2.0, RateLimited and ThrottlesExceptions were effectively decorative on this transport — a released job vanished instead of backing off. If your roadmap depends on respecting third-party API quotas, this release makes that promise real.--queue= flag lets a released job return to its originating queue instead of always landing on default. That unlocks per-queue worker topologies (e.g. critical, bulk, webhooks with different concurrency and failure budgets) without released jobs collapsing into a single lane and starving priority work.--queue defaults to default so hubs that don't send a queue keep working. This is a low-coordination-cost upgrade — useful when arguing for shipping it in the next sprint rather than batching it into a larger migration.Consider adoption when:
queue:work daemon can't speak to that hub directly.WithoutOverlapping, RateLimited, ThrottlesExceptions, or manual release($delay) in jobs executed on this transport. Before 1.2.0 those were unsafe; 1.2.0 is the minimum viable version for these patterns. Treat 1.2.0 as the floor for any new adoption.--queue= flag is the deciding feature if released jobs must not all funnel into default.Look elsewhere when:
default — if your topology has no worker listening there, you've converted one failure mode into another. Verify hub-side queue propagation before enabling per-queue workers.For executives: We depend on a queue consumer to move asynchronous work between our systems. Version 1.2.0 fixes a silent job-loss bug: when a job asked to be retried later — because of a rate limit, a lock conflict, or an explicit backoff — the consumer reported success while the hub discarded the job. No error, no failed-job record, no log. Work simply disappeared. This release makes retries actually retry, and makes a hub rejection fail loudly instead of quietly. It's a correctness fix on infrastructure we already run, requires no hub-side changes, and the new queue flag defaults to today's behaviour — so it's a low-risk upgrade we should schedule now.
For engineering: Upgrade to 1.2.0 as the minimum version wherever released jobs occur. Mechanics: SyncJob::release() only flipped a flag, and sync has nowhere to push to, so release($delay) was a no-op that still exited 0. Jobs now run through a HubJob that captures the delay the base release() discards and re-posts the untouched payload back to the hub with that delay; a refused re-post fails the command rather than losing the job. queue-consumer:run --queue= controls which queue released jobs return to (defaults to default, so existing hubs are unaffected). Action items: (1) verify hub payloads carry a queue name before rolling out non-default queues, (2) add alerting on consumer non-zero exit and re-post failures, (3) confirm jobs on this transport are idempotent, since re-post implies possible duplicates, (4) add a regression test covering a released job surviving to a second attempt.
How can I help you explore Laravel packages today?