mcfedr/resque-bundle
Symfony bundle that integrates the Resque PHP job queue with your Symfony application, letting you dispatch background jobs, run workers, and manage queues through a familiar configuration-driven setup.
Architecture fit — poor as stated. The premise of a "Laravel/PHP package" does not hold here: mcfedr/resque-bundle is a Symfony bundle, packaged for Symfony's kernel/DI/config-tree conventions (service definitions, Extension/Configuration classes, console commands registered through the container). Laravel's service-provider + facade + config/*.php model has no bridge for it, and Symfony bundles are not autoloaded into Laravel's container. There is no Laravel integration surface to adopt — only something to rewrite.
The underlying dependency is also a mismatch. Resque is a Ruby job system backed by Redis. Adopting it means either (a) running Ruby worker processes alongside a PHP app, or (b) using a PHP reimplementation (e.g., php-resque) and accepting its divergences from the Ruby reference implementation. The bundle is a thin producer/worker-bootstrap layer over one of those runtimes; it is not the queue itself. Value is therefore concentrated in a few hundred lines of glue that are straightforward to reproduce.
Integration feasibility — low. In a Symfony shop, composer require plus a config/packages/resque.yaml block is a day's work. In a Laravel shop, the realistic paths are:
php-resque (or a maintained fork) directly behind a Laravel service provider — same destination, less dead code.Technical risk — high.
| Signal | Reading |
|---|---|
| 9 stars, 0 dependents, score 0.105 | Effectively no production user base; no one to surface breakage |
| Single-maintainer bundle | Bus factor 1; abandonment is the base case, not the tail risk |
| Symfony-era compatibility | Likely pinned to Symfony 2/3/4 and PHP 7.x; PHP 8.2+ and modern ext-redis are unverified |
| Resque itself | Legacy relative to Sidekiq; feature-frozen, Ruby-ecosystem-shaped |
The dominant technical risk is payload coupling: Resque jobs are JSON envelopes carrying a class name string plus positional arguments. Renaming a class, changing a constructor signature, or altering argument order silently breaks in-flight jobs — and because producers and workers are separate processes on separate release cadences, this is a deploy-ordering problem, not a code-review problem. A second risk is that the bundle's runtime assumptions (which Resque implementation, which Redis client, whether ext-redis or Predis) are undocumented at the level needed for a go/no-go.
Key questions to put to the maintainer or resolve in a spike:
resque, php-resque, or a bespoke implementation — and is the JSON payload wire-compatible with the Ruby reference?ext-redis?resque-scheduler, retry plugins, and the failure backend, or only enqueue + work?Stack fit. Do not integrate this bundle into a Laravel application. If the stack is Symfony, it is a candidate but must clear the PHP-version gate first. If the stack is Laravel, the correct framing is "we need a Redis-backed background job system" — for which Horizon is the native answer and php-resque is the interop answer. Neither requires this bundle.
Recommended architecture decision. Treat the bundle as non-adoptable, low-effort-to-replace. The defensible move is to define a narrow internal JobDispatcher interface (dispatch(string $jobClass, array $args): void, register(string $jobClass, callable $handler): void) and implement it once. That interface is ~150 lines of Redis RPUSH/BLPOP plus a supervised worker command. Owning that code costs less than owning a dependency with zero dependents.
Migration path. Whether arriving from or leaving Resque, migrate on the contract, not the library:
Compatibility gates (must pass before any code is written):
composer require resolves on the target PHP without --ignore-platform-reqs.Sequencing. Two-week timebox: week 1 spike (compatibility gates + payload contract documented); week 2 decision memo with build-vs-adopt costing. Do not sequence this behind a feature release — the deploy-ordering hazard around payload changes argues for an isolated cutover window.
Maintenance. Assume unmaintained. The practical posture is vendor-and-fork: pin the exact commit in composer.json, mirror to internal Git, and budget ~2–4 engineer-days per year for PHP/Redis compatibility patches. MIT license makes forking legally trivial; the cost is entirely in ongoing ownership, not in permission.
Support. No community, no SLA, no upstream triage. Any incident is an internal-oncall incident with no external escalation path. Contrast with Laravel Horizon, where the observability surface (throughput, wait times, failed-job inspection, retries) ships in the box. Here, the standard dashboard is resque-web — a Ruby/Sinatra app — meaning operators need Ruby-ecosystem fluency to see queue health. That is a real, recurring staffing constraint, not a one-off setup cost.
Scaling. The bundle is not the bottleneck; Resque's process model is. Workers fork per job, so memory is a function of worker count × peak job footprint, and scaling is horizontal process count — no autoscaling signal unless one is built. Redis becomes a hard dependency for both throughput and durability, so Redis sizing, connection limits, and maxmemory-policy are production-critical. Policy must be noeviction for the queue database; allkeys-lru silently discards jobs under memory pressure, which presents as "jobs vanish" with no error anywhere.
Failure modes to instrument before launch:
Ramp-up. High, and the cost is breadth rather than depth: engineers need Symfony DI conventions, Resque's fork-per-job semantics and failure backend, and Ruby tooling for operational visibility. Estimate 3–5 days for a mid-level engineer to be productive on the worker side, plus a standing Ruby literacy requirement for whoever is on call. That is a disproportionate tax for what is, functionally, "Redis plus a worker loop."
Net assessment. Score 0.105 is consistent with what the repository shows. The recommendation is do not adopt: the bundle is a thin, unmaintained wrapper around a legacy runtime, fits the wrong framework, and imports a cross-language operational burden. If the requirement is Redis-backed background jobs on Laravel, Horizon is the lower-risk default; if the requirement is Ruby Resque interop, integrate against the JSON contract directly and own the ~150 lines rather than inheriting an abandoned dependency.
How can I help you explore Laravel packages today?