resque/php-resque
PHP port of Resque: a Redis-backed background job queue for PHP applications. Enqueue jobs, run forked workers across multiple queues, and process tasks asynchronously to keep web requests fast. Includes job classes, queue management, and worker controls. Lightweight and easy to integrate.
What it is: resque/php-resque is a PHP port of Ruby's Resque — a Redis-backed, fork-per-job background worker system. Jobs are JSON payloads pushed onto Redis lists (resque:queue:<name>); worker processes BLPOP a job and fork() a child to execute it. It is a standalone library, not a Laravel package: no service provider, no facade, no Laravel queue driver.
Architecture fit:
database/redis/SQS drivers + Horizon) is insufficient. The genuine differentiator is payload-level interoperability with Ruby Resque, enabling a single queue consumed by both PHP and Ruby workers — relevant for polyglot estates or teams migrating off a Rails/Resque backend.Illuminate\Queue, with its own worker lifecycle, failure handling, and tooling.ext-redis (phpredis), ext-pcntl, and ext-posix; Linux/Unix only. This constrains container base images and rules out Windows dev parity and some serverless runtimes (no long-lived forking workers on Lambda/Fargate-style ephemeral compute without re-architecture).Integration feasibility: Feasible but not turnkey. Two realistic paths:
Illuminate\Contracts\Queue\Queue (push/pop/size/later) plus a worker that maps to Laravel's Worker/Job contracts so events, middleware, and failed() hooks work. This is the "correct" integration and the only one that gives a native developer experience — estimate 3–6 engineer-weeks including tests and failure-path parity.Technical risk (medium-high):
maxmemory-policy noeviction. A shared Redis instance with an LRU policy silently drops jobs — a classic, hard-to-diagnose outage.Key questions to resolve before committing:
redis driver + Horizon.Stack fit: Laravel 10/11/12 on PHP 8.1+ with an existing Redis instance. Because most Laravel stacks already run Redis for cache/sessions, the infrastructure delta is small; the conceptual delta — a second queueing system — is the real cost. Use a dedicated Redis database index or key prefix so resque:* keys never collide with Laravel's queues:*/laravel_database_* keys, and never share an eviction-policy-sensitive instance with cache workloads.
Migration path (only if a driver is required beyond the POC):
ResqueConnector + ResqueQueue implementing the Laravel Queue contract, and a ResqueWorker mapping to Illuminate\Contracts\Queue\Job so failed(), $tries, and middleware behave as engineers expect.handle()-style entry points) so they can move back to the native driver if the pilot fails. Treat this as a reversible bet.Compatibility considerations:
Sequencing: capability spike → interoperability proof (if Ruby matters) → driver implementation → supervision and restart automation → observability → first queue in production → expand or retire. Gate each stage on the previous stage's evidence; do not skip the interop proof, since it is the only durable reason to adopt this package.
Maintenance: Low-velocity upstream. Pin to a tagged release, track the repository for security-relevant commits, and budget for an internal fork. Compare against Laravel's first-party queue stack, which receives framework-version compatibility work for free — every Laravel major upgrade becomes a compatibility question you own here.
Support: No commercial backing; community issue tracker only. Support burden lands on the adopting team. Expect to write your own runbooks, dashboards, and failure-triage documentation. Resque's Ruby tooling (resque-web) is usable against shared Redis and is the strongest operational asset, but it is a separate Ruby runtime to stand up.
Scaling:
baseline × concurrent children).Failure modes to instrument and runbook:
noeviction + AOF/RDB, alert on list depth dropping to zero unexpectedly.Ramp-up: Engineers fluent in Laravel queues face a real relearning cost — different failure semantics, different retry model, different debugging tools. Estimate 2–4 weeks for a small team to reach production confidence, plus ongoing on-call familiarity. The hidden cost is cognitive: two job systems in one codebase invite inconsistency (some jobs retry automatically, some don't), so publish a written policy on which queues use which system and why.
Bottom line for a TPM decision: adopt only if PHP↔Ruby Resque interoperability is a current, funded requirement; otherwise the maintenance, failure-handling gaps, and dual-paradigm overhead outweigh the 8.8 score, and Laravel's native Redis driver with Horizon is the lower-risk default. If adopted, fund the custom driver, supervision, and observability work up front rather than after the first incident.
How can I help you explore Laravel packages today?