mmucklo/queue-bundle
Symfony bundle for background job queues with worker commands, job scheduling, and pluggable backends. Offload time-consuming tasks and process them asynchronously using Doctrine, MongoDB, Redis, or other supported queue stores.
JobManagerInterface) sitting over Redis, RabbitMQ, Beanstalkd, Doctrine ORM/MySQL, Doctrine ODM/Mongo, and custom backends, plus a unified worker command. That is an argument for deferring the "which broker do we standardize on?" decision — not for adopting this package. The same deferral is achievable on Laravel queue connections with no new dependency.Bundle class, DI extension, compiler passes, YAML config tree, dtc:queue:run console command. There is no service provider, facade, or Illuminate\Queue contract surface. On a Laravel target the evaluation ends at "incompatible," because native queues plus Horizon already cover database, Redis, SQS, and Beanstalkd with first-party support.JobManagerInterface transports → Laravel queue connections, job classes → ShouldQueue jobs, dtc:queue:run → queue:work under Supervisor, bundle dashboard → Horizon or a failed-jobs view. Behavioral parity in days, not weeks.Consider it when:
Look elsewhere when:
Executive summary. This is a small, MIT-licensed Symfony bundle that abstracts background job queues across Redis, RabbitMQ, Beanstalkd, MySQL/Doctrine, and MongoDB, with a built-in worker command, delayed jobs, retries, pluggable serializers, and a job dashboard. Its one real idea is that job code should not know which broker it runs on — so you can start with a database-backed queue and graduate to a real broker without rewriting application code. That is a legitimate pattern and worth knowing about.
It is not a fit for us. It is a Symfony 2–5 bundle and we are on Laravel; our framework already ships this capability natively, with first-party maintenance and better observability through Horizon. It also stops at Symfony 5, so even a Symfony team starting today would adopt an end-of-life dependency. With 0 dependents and a single maintainer, the support risk outweighs the value of the abstraction.
Recommendation: do not adopt as a dependency. Treat it as a reference design. If we ever need a swappable transport layer, reproduce the pattern — a transport-agnostic job contract with pluggable drivers, an explicit status lifecycle, and scheduled stalled-job recovery — on top of Laravel's queue component in a few hundred lines, with no new third-party risk and no divergence from the framework.
Engineering takeaway: zero new dependencies, zero maintenance burden, same capability delivered by the stack we already run. Action: close the evaluation, capture the job-status/recovery pattern in our design notes, and revisit only if a hard Doctrine ODM/Mongo requirement appears in an inherited Symfony estate.
How can I help you explore Laravel packages today?