- Can I use jms/job-queue-bundle in a Laravel application?
- No. jms/job-queue-bundle is a Symfony bundle that registers through Symfony's HttpKernel Bundle class and boots via DI compiler passes; Laravel has no equivalent bundle mechanism, service provider, facade, or Artisan integration. Making it work in Laravel would require reimplementing its container and persistence layers rather than installing it. If your target is Laravel, treat this package as design reference only and use Laravel's native queue, bus, and scheduler features.
- Is jms/job-queue-bundle still maintained and safe for production?
- It is effectively unmaintained: the last release was 2019-09-09, which predates Symfony 5 GA, PHP 8.0, and Doctrine ORM 3. An unmaintained package that dispatches console commands and runs long-lived workers is an unattended attack surface, and there is no upstream maintainer to patch issues. For new production work, especially in Laravel, it should be rejected on maintenance and security grounds.
- What PHP and Symfony versions does jms/job-queue-bundle support?
- The bundle targets the Symfony 2/3 and Doctrine ORM 2 era; its 2019 release predates Symfony 5, PHP 8, and Doctrine ORM 3. You should expect Composer constraint conflicts against any modern Laravel or Symfony dependency graph. Verify with composer why-not jms/job-queue-bundle before assuming compatibility, and be prepared for a fork if you must run it.
- How do I install jms/job-queue-bundle, and why does Composer fail in Laravel?
- Installation assumes a Symfony app: composer require jms/job-queue-bundle followed by registering the bundle in AppKernel or bundles.php and configuring Doctrine. In a Laravel project there is no bundle registration step, and the package's Symfony and Doctrine constraints will usually block installation or force --ignore-platform-reqs hacks. Those hacks create unpatchable dependency debt, so do not treat a forced install as a working integration.
- How does jms/job-queue-bundle persist jobs compared to Laravel's queue tables?
- It stores each job as a Doctrine ORM entity with status, output history, and scheduling metadata. Laravel persists queue work in database tables through its database queue driver and Eloquent models, which fits Laravel's default stack without mixing Doctrine's Unit of Work into the process. Running both ORMs in one application is possible but adds complexity and is not a supported integration path here.
- How do I run and scale workers in jms/job-queue-bundle versus Laravel queue:work?
- The bundle ships a long-running jms-job-queue:run console command with concurrency and runtime limits, typically supervised outside the web request cycle. Laravel's equivalent is php artisan queue:work managed by Supervisor or Horizon, with native concurrency, retries, and monitoring. Mixing the two means operating a separate worker lifecycle, logging stack, and container semantics alongside Laravel's queue system.
- Does jms/job-queue-bundle support job dependencies and chained jobs like Bus::chain or Bus::batch?
- Yes, dependency ordering between jobs is one of the bundle's differentiators: job B can wait on job A before executing. Laravel covers the same need with Bus::chain for sequential work and Bus::batch for grouped jobs with completion callbacks and failure handling. That overlap is the main reason a Laravel team would not need this bundle even if it were maintained.
- How does scheduling recurring jobs work in jms/job-queue-bundle compared to Laravel's scheduler?
- The bundle can schedule recurring jobs in its database-backed queue and execute them through its worker. Laravel's scheduler handles cron-style recurring tasks with $schedule->command and $schedule->job, and it is already integrated with the framework's console kernel and queue system. Using the bundle's scheduler would duplicate that with a second, unmaintained scheduling mechanism.
- How does jms/job-queue-bundle handle retries and failed jobs?
- It supports retrying failed jobs and exposes status and output history for monitoring from the console and a web interface. Laravel handles retries, backoff, and failed-job storage natively through queue workers and the failed_jobs table, with Horizon providing dashboards and tags. If your requirement is retry visibility, Laravel's built-in tooling already covers it without a Symfony dependency.
- What should Laravel developers use instead of jms/job-queue-bundle, and how do I migrate?
- Map each capability to native Laravel: Artisan::queue or a ShouldQueue job wrapping Artisan::call for command jobs, jobs and failed_jobs tables for persistence, Bus::chain and Bus::batch for dependencies, the scheduler for recurring work, and Horizon for monitoring. Migrating means moving job definitions into Laravel job classes and replacing the jms-job-queue:run worker with queue:work under Supervisor or Horizon. Do not attempt a runtime bridge between the two systems.