Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Job Queue Bundle Laravel Package

levuro/job-queue-bundle

levuro/job-queue-bundle provides a lightweight, database-backed job queue for Symfony apps. Dispatch background jobs, process them with worker commands, and manage retries, failures, and delayed execution without adding external queue infrastructure.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

This is not a Laravel package — that is the first thing to settle. Despite living on Packagist and being installable via Composer, levuro/job-queue-bundle is a Symfony bundle (JMSJobQueueBundle) built on Doctrine ORM, FrameworkBundle, and the Symfony console. It ships no Laravel service provider, no facade, no publishable config/jms_job_queue.php, and no integration with Laravel's queue contract, Illuminate\Bus abstractions, or Eloquent. "Laravel/PHP package" in the metadata is a category label, not an integration claim. As TPM, treat any roadmap line item that assumes drop-in Laravel usage as mis-scoped and correct it before a single sprint is spent.

Architecture fit — where the product value actually is. The bundle's real offering is a persistent, inspectable job queue: each job is a database record (with Job/RelatedJob entities), processed by a jms-job-queue:run worker, with recurring/cron scheduling, retry and failure states, and an admin web UI. Two properties matter for product decisions:

  • Transactional enqueue. A job can be written in the same DB transaction as the business data that triggered it, so you don't get "order saved, email job lost." This is a genuine correctness advantage that Laravel's Redis/Horizon path requires more care to replicate (though afterCommit / the database driver narrows the gap).
  • Job history as first-class data. Support triage, SLA reporting, and audit queries run against a table, not grepped logs.

Both are achievable in Laravel with the built-in database queue driver plus a thin job_audit table, or with Horizon's metrics/failed-job store. So the capability is worth having; this package is not the cheapest way to get it in a Laravel estate.

Technical risk.

  • Tiny adoption footprint. 1 star, 0 dependents, score 0.365. There is no downstream ecosystem proving this works in production at any scale, and no community to absorb maintenance if the maintainer stops. Bus factor is effectively 1.
  • Feature-frozen. Release 1.10.9 (2024-04-16) is a pure dependency swap: symfony/debug dropped, symfony/error-handler required (PR #20). No features, no deprecations, no API changes. That is fine for stability, but it confirms the project is in keep-the-lights-on mode and should not anchor a multi-year roadmap.
  • Patch-level semver used for requirement changes. Going 1.10.8 → 1.10.9 mutates the Composer constraint set. Any consumer on a floating constraint absorbs it on a routine composer update. Low blast radius here, but it signals the maintainer's release discipline.
  • Symfony floor implied. symfony/error-handler exists only from Symfony 4.4+. If the bundle's framework-bundle/console constraints still permit 3.4 or 4.0–4.3, the requirement set becomes unsatisfiable on that floor — a loud CI failure, but a failure.
  • Silent transitive removal. Anything leaning on symfony/debug arriving transitively (custom worker error handling, public/index.php bootstrap, bin/console) fails at runtime, not install time. That is the one genuinely sneaky failure mode in this release.

Key questions.

  1. Does the repo have a real user base outside the maintainer's own applications? With 0 dependents, we are implicitly the QA.
  2. What is the declared PHP and Symfony version range, and is the lowest supported Symfony version in CI?
  3. Is there test coverage of the worker's exception/error path, given 1.10.9 touches the error-handler dependency?
  4. Who is on the hook if the maintainer stops publishing? (Fork-and-own is the realistic answer — price that in.)
  5. Why does a dependency change ship as a patch rather than a minor, and what does that imply about future breaking changes?

Integration Approach

Stack fit — decision rule. Adopt only when: the runtime is Symfony 4.4+ (ideally 5.4/6.x), Doctrine ORM is already in the tree, expected volume is low thousands of jobs/hour or less, and durable job records / operator visibility are product requirements rather than nice-to-haves. Do not adopt when: the application is Laravel-first, persistence is Eloquent/MongoDB, volume is broker-scale, or the team needs an actively evolving feature roadmap.

For a Laravel codebase specifically, the integration is not "install and configure" — it is a bespoke bridging project: pull in laravel-doctrine/orm for entity mapping, hand-wire the bundle's services into Laravel's container, run a second console entry point, and maintain that glue forever. That is engineering spend to acquire a queue we already have. The only defensible trigger is coexistence: we already run a Symfony service (legacy batch/reporting/integration-sync system) whose job history we need in one place, and we are strangling it toward Laravel over time.

Migration path for 1.10.9 (fold into a routine dependency-refresh cycle; do not run as a standalone release event):

  1. Inventory the constraint graph: composer why symfony/debug and composer why-not symfony/error-handler across every service that depends on the bundle.
  2. Grep for Symfony\Component\Debug across application code, custom worker wrappers, and error-handling bootstraps — this is the only place the patch can bite silently.
  3. Pin to 1.10.9 explicitly rather than floating; run the suite against the lowest supported Symfony version, then promote.
  4. Confirm symfony/error-handler resolves alongside the pinned framework-bundle — usually a lockfile no-op on modern Symfony.
  5. Any service still on Symfony <4.4 pins to 1.10.8 and gets a separately scheduled platform upgrade. Do not let a patch bump force an emergency framework upgrade.

Compatibility posture. Verify the declared constraints rather than assuming 4.4–6.x support. Record the supported-platform matrix (Symfony floor, PHP floor) as an owned artifact; unsupported combinations should fail in CI, not in production.

Sequencing. Two gates, in order: (a) Does a Symfony runtime exist in our estate? If no, stop — the answer is Laravel's queue. (b) If yes, is the Laravel-side queue abstraction spike scheduled before we invest further here? That spike could moot this work entirely. Run it first.

Operational Impact

Maintenance. Positive for this release — removing an abandoned, EOL-coupled package reduces audit/CVE noise and aligns with the component Symfony itself replaced it with. The ongoing concern is the pattern, not the patch: dependency-only releases mean on-call must keep CI pinned to a Symfony floor or risk silent breakage on composer update. Plan for this repository to require occasional fork-and-patch if the maintainer goes quiet.

Support. No user-facing behavior change, so no runbook or documentation updates are required. Two caveats: (1) if the Symfony floor is effectively raised, update the internal supported-platforms note so an install failure isn't debugged as a queue bug; (2) in a Laravel estate the operational knowledge for this bundle exists in exactly one or two people — capture a written runbook before it becomes tribal.

Scaling. Unchanged by this release but worth restating for the roadmap: this queue scales with the database, not independently. Watch job-table growth and index health, worker concurrency versus DB connection-pool limits, and lock contention between in-transaction enqueues and the polling worker. Recurring/cron job rows accumulate and need the bundle's cleanup command scheduled. Sustained churn beyond roughly a few hundred jobs/second is the point where a broker-backed queue is the better answer.

Failure modes.

  • This release: constraint conflict (loud, caught in CI) or runtime class not found from a lingering symfony/debug reference (silent until the error path is hit — the one to guard against). Mitigation: a smoke test that deliberately throws inside a job, not just a green composer install.
  • Baseline bundle: worker death leaving jobs unprocessed with no external alarm (needs a liveness check plus queue-depth alerting); jobs stuck or locked after a mid-transaction crash; retry storms on a poison message; queue growth silently degrading the primary database — the last is the highest-cost one, because it degrades the product, not just the queue.

Ramp-up. Low for a Symfony/Doctrine team: roughly a day to run the worker, read the admin UI, and understand scheduling. The learning cost sits in operating a DB-backed queue (transaction boundaries, worker supervision, cleanup), not in the package API. For a Laravel-only team the ramp-up is a framework migration plus permanent glue — reflect that in any estimate that assumed a drop-in component, and prefer the Horizon-or-database-driver path with a lightweight job-audit table unless a Symfony service already makes coexistence unavoidable.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource