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

eo/job-queue-bundle

MongoDB ODM implementation for JMSJobQueueBundle that lets you schedule Symfony2 console commands as background jobs. Requires Symfony 2.1+ and one supervisord-managed eo-job-queue:run process, with a configurable job class.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package is not a Laravel package. It is a Symfony 2 bundle (2.1+) that supplies a MongoDB ODM persistence backend for JMSJobQueueBundle, the component that actually schedules console commands as background jobs. Its job is narrow: swap Doctrine ORM storage for MongoDB storage.
  • There is no Laravel equivalent surface: no service provider, no Illuminate\Queue\ driver contract, no ShouldQueue integration, no Facade. Reusing it in a Laravel application would require porting the document schema and job-state model, at which point you have written your own package.
  • The one durable idea worth evaluating is the pattern: wrapping console commands as persisted, retryable, inspectable jobs. That pattern is already first-class in Laravel (php artisan queue:work, Bus::dispatch, schedule:run, Horizon) and in modern Symfony (Messenger). The package adds nothing the native stack does not already provide more safely.
  • Step 3 is architecturally invasive: it asks you to replace app/console's base Application class with the bundle's subclass. That is a global interception of every console command in the application, not a scoped integration. It raises blast radius for zero incremental capability.

Integration feasibility

  • Effectively not feasible for a Laravel target. For a legacy Symfony 2/3 target it is technically installable but constrained to dev-master only — no tagged releases, no semver, no stability guarantee. Composer will require "minimum-stability": "dev" concessions or an explicit dev-master pin, and that pin is unpinned-in-practice since a branch can move.
  • Dependency chain is four layers deep and each layer is legacy: Symfony 2.x → JMSJobQueueBundle → Doctrine MongoDB ODM (old major) → MongoDB PHP driver (old ext/mongo-era API). Any one of those failing to resolve on a modern PHP runtime blocks the install outright.
  • The README documents installation and one optional config key (custom job class). There is no documentation of the job state machine, retry semantics, or concurrency model. Integration effort is therefore discovery-bound, not code-bound — you would be reverse-engineering behavior from source.

Technical risk

  • Abandonment risk: high. 3 stars, 0 dependents, single maintainer, readme-level maturity. No evidence of recent activity. Treat as unmaintained.
  • End-of-life stack risk: high. Symfony 2.1 shipped in 2012 and is long past EOL; the same is true for the compatible Doctrine ODM and JMSJobQueueBundle releases. Running this means running an unsupported PHP/framework baseline, which is a security and audit finding in most organizations regardless of this package.
  • Compatibility risk: high. Locked ecosystem versions will conflict with any modern PHP 8.x application and with any current dependency set.
  • Correctness risk: medium-high. Job queues are the part of a system where at-least-once vs. exactly-once semantics matter. A thinly documented, low-adoption persistence layer over MongoDB is the wrong place to accept unknowns — visibility timeouts, stuck-job reclamation, and idempotency guarantees are all undocumented.
  • Adoption signal: the composite score (~0.81) with a low stars/dependents base and readme maturity reads as "interesting pattern, non-viable dependency."

Key questions

  1. What is the actual target stack — Laravel, or a legacy Symfony 2/3 application being maintained? The answer changes this from "reject" to "contain and vendor."
  2. If Laravel: is the real requirement scheduling (→ schedule:run + onOneServer), async execution (→ queued jobs + workers), process isolation (→ queued jobs wrapping Artisan::call), or operator visibility (→ Horizon/Telescope)? Almost certainly the answer is a native combination, not this package.
  3. What is the required delivery guarantee — at-least-once with idempotent handlers, or true exactly-once? The package does not document this.
  4. Is MongoDB a mandated datastore? If not, the package's only raison d'être (Mongo persistence) evaporates and JMSJobQueueBundle's ORM path — or the native stack — dominates.
  5. What is the volume and concurrency profile (jobs/hour, peak workers, max job duration)? Determines whether you need a real worker supervisor at all.
  6. Does anything already depend on this bundle, or is this a greenfield evaluation? With 0 dependents, this is almost certainly greenfield.

Integration Approach

Stack fit

  • Laravel target: do not integrate. There is no adapter path worth building. Map requirements to native primitives: Queue::push / dispatch() for async work, Bus for command-style handlers, app/Console/Kernel::schedule() for cron semantics, Artisan::call() inside a job when you specifically need a console command executed in a worker process, and Horizon for supervision and observability. This satisfies the package's stated purpose with supported, documented components.
  • Legacy Symfony target: treat as a containment exercise, not a modernization. Fork and vendor the package, pin to a specific commit SHA, and freeze the surrounding stack.
  • If the goal is to migrate off Symfony 2: do not adopt this bundle as an intermediate step. It couples you harder to the platform you are trying to leave.

Migration path

  1. Baseline inventory — enumerate every console command the application exposes, which ones are long-running or need to be scheduled, and which are currently invoked ad hoc via cron or manually.
  2. Classify by need — pure scheduled work (cron semantics), fire-and-forget async (no result needed), or long-running isolated batch (needs its own process and timeout).
  3. Rebuild on the target stack — one job/command class per console command, wrapping the existing command via Artisan::call() (Laravel) or a Messenger handler (Symfony 4+). This preserves command logic while replacing the transport.
  4. Port the state model, not the code — the only artifact worth carrying forward from EoJobQueueBundle is the idea of a persisted job record with status, attempts, timestamps, and output. Model it as a jobs table (Laravel's schema is already this) or an equivalent document.
  5. If a legacy Symfony 2 system must keep running — vendor the fork, add integration tests around enqueue/execute/retry/failure, and put a deprecation date on it.

Compatibility

  • Composer resolution is the first gate and likely the last: dev-master requirement, Symfony 2.1 constraint, old Doctrine MongoDB ODM, and pre-PHP-7 driver API. Validate that the target runtime can resolve at all before investing design time. Expect this check to fail on PHP 8.x.
  • The app/console Application subclass override must be validated against every existing command's execute() signature and every bundle that registers commands — third-party bundles that assume the standard Application may break.
  • Confirm the MongoDB server version in your environment against what the bundled ODM supports; MongoDB has removed wire-protocol features the old driver depends on.

Sequencing

  • Week 1: compatibility spike — attempt resolution and install in a throwaway branch. This is a cheap go/no-go and should gate everything else.
  • Week 2: if the spike passes and a legacy Symfony system must be maintained, vendor/pin and write behavior tests. If it fails (expected), close the evaluation and proceed to native reimplementation.
  • Weeks 3+: build the native job layer on the target stack, mapping one job per console command, and migrate scheduling in small batches with dual-run validation before cutting over.

Operational Impact

Maintenance

  • Ownership transfers entirely to you. No tagged releases, no changelog, no issue triage, single maintainer. Budget for a fork you patch yourself, or accept the risk knowingly.
  • The legacy dependency stack (Symfony 2.x, old Doctrine MongoDB ODM, old MongoDB driver) will block routine PHP upgrades and security patching for the whole application, not just the queue. This is the dominant cost and it accrues to the platform team, not the feature team.
  • Every future framework modernization becomes harder while this bundle is present — it acts as a ratchet on the baseline.

Support

  • No vendor, no community, no dependents to learn from. Incident triage is source-reading. Document the job state machine yourself in the first week of ownership or you will not be able to diagnose production stalls.
  • No upstream security process. Any CVE in the dependency chain lands on you with no upgrade path except forking.
  • Onboarding cost is disproportionate: a new engineer cannot consult documentation, blog posts, or Stack Overflow for this package.

Scaling

  • Scaling model is MongoDB + worker processes. MongoDB as a job store is workable but requires attention to atomic claim semantics (find-and-modify), index design on status/priority/created fields, and unbounded collection growth if completed jobs are not pruned. None of this is documented.
  • Worker concurrency is limited by the console-command execution model: each job is a PHP process invocation, so per-job memory and bootstrap cost dominate throughput. Long-running batch commands will not amortize bootstrap the way an in-process worker would.
  • No documented backpressure, rate limiting, or priority handling. If you need those, you are building them.

Failure modes

  • Stuck jobs: if a worker dies mid-execution, the job's status record may never be cleared. Without a documented visibility timeout or heartbeat, these silently accumulate and block capacity.
  • Duplicate execution: at-least-once semantics plus no documented idempotency contract means retried jobs may double-apply side effects. Every handler must be written defensively.
  • Global console breakage: the Application subclass override is a single point of failure for all console commands, including deploy and maintenance scripts. A regression there is an outage, not a degraded feature.
  • Dependency drift: a dev-master pin means composer update on an unrelated package can silently change queue behavior. Lock files must be treated as immutable.
  • Connection loss: MongoDB unavailability during enqueue silently drops work unless the calling code checks the result; during execution it can leave orphaned state.
  • Unbounded growth: no documented job retention or pruning; the collection grows without a retention policy until queries degrade.

Ramp-up

  • Low for the pattern, high for the package. An engineer familiar with queue semantics will grasp intent in an hour; understanding actual behavior requires reading the bundle and JMSJobQueueBundle source, plus the Doctrine ODM persistence path.
  • Estimate 1–2 weeks for a competent engineer to become confident enough to operate this in production, versus 1–2 days for the equivalent native Laravel queue primitives that have documentation, community answers, and Horizon's observability UI.
  • Recommendation: do not adopt as a dependency. Treat it as a design reference for wrapping console commands as jobs, and implement that pattern on the target stack's supported queue component. Reserve adoption only for the narrow case of an existing legacy Symfony 2 system where the fork-and-vendor cost is already sunk and migration is explicitly out of scope.
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.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
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