dejwcake/laravel-queue-rabbitmq
RabbitMQ queue driver for Laravel. Connects Laravel's queue system to RabbitMQ so jobs publish and consume over AMQP, with configurable exchanges, routing, delays, and connections. A drop-in alternative to the default queue driver, configured through queue.php for reliable background processing.
Worker signatures. If a Laravel 13 upgrade is on the roadmap, v15.1.0 is the version that makes rabbitmq:consume actually work there — on Laravel 13.31+ every delivery previously failed with an ArgumentCountError, and on 13.18+ the --max-jobs / --stop-when-empty limits silently never fired. Treat this as a gating dependency in the upgrade plan, not a nice-to-have.rabbitmq:consume propagates the worker's exit code like queue:work, e.g. 12 on memory-limit. Before, it always exited 0. That single change determines how Supervisor/systemd/Kubernetes restart policies and alerts should be configured, and it turns "container exited" from a useless signal into a diagnosable one.SIGUSR2) now exits on SIGTERM, a queue restart, or time/memory limits instead of hanging until resumed. This unblocks rolling deploys and scale-down flows that rely on pause-then-terminate; previously those could stall a pod past its termination grace period.declareExchange() now waits for broker confirmation, so an isExchangeExists() check immediately afterwards no longer intermittently returns false, and a rejected declaration fails fast rather than surfacing later on an unrelated operation. This supports a decision to move topology provisioning into deploy steps instead of manual runbooks — with the tradeoff that declaration is now a synchronous round trip on the startup path.Adopt (or upgrade to) this package when:
--max-jobs, --stop-when-empty, --stop-when-empty-for, and pause/resume for draining.Look elsewhere or defer when:
^8.1 (the previous ^8.0 could never resolve, so this is cleanup rather than a real narrowing — but confirm your runtime floor).pauseWorker() overrides. If you subclass Consumer and override pauseWorker() (inherited from Worker), that hook is no longer called; a paused consumer now checks stop conditions itself. Audit before upgrading.Upgrade checklist a PM should track as acceptance criteria:
restart policies — they now see real exit codes. A rule that restarts on any non-zero exit will crash-loop a memory-limited worker that should instead be recycled with a fresh limit or scaled.0.pauseWorker() overrides.SIGTERM against your termination grace period.To executives: This is a maintenance upgrade to our RabbitMQ queue driver that closes a silent job-loss risk on Laravel 13 — on recent Laravel versions the consumer either processed nothing or ignored its own stop limits, both without obvious errors. It also makes worker exit codes meaningful, which improves how our infrastructure reacts to failures. Cost is a small, well-scoped operations config review (restart policies and alerts); there is no new service to run and no vendor spend.
To engineering: Upgrade to v15.1.0 before or alongside the Laravel 13 move — it is the version that fixes the Worker signature incompatibilities (ArgumentCountError on 13.31+, ignored stop conditions on 13.18+). Three behaviour changes to handle deliberately: exit codes now mirror queue:work (e.g. 12 for memory limit, previously always 0), so update process-manager restart rules and alerts; subclassed Consumer::pauseWorker() overrides are dead code and pause now exits on SIGTERM/restart/limits; and declareExchange() is now a confirmed, synchronous round trip, so deploy-time topology steps will fail fast instead of flaking later. The test suite now drives rabbitmq:consume end to end and CI pins the last pre-change Laravel releases, so regressions in this area should surface in CI rather than in production.
How can I help you explore Laravel packages today?