laravel-queues
Laravel 13 queue and job patterns — driver choice, job design (idempotency, ShouldQueue, model serialisation), retry and failure handling, worker scaling, Bus batching and chaining, Horizon when warranted, queue testing. Use when designing async jobs, scheduling background work, configuring Horizon,
By asyrafhussin · 450 installs
npx skills add asyrafhussin/agent-skills --skill laravel-queues
Source repository · Upstream listing
Laravel Queues & Jobs
Production grade queue patterns for Laravel 13 (MySQL + Redis). Contains 20 rules across 6 categories covering driver choice, job design, retry/failure handling, worker scaling, batching/chaining, and testing. Targets the failure modes that pass code review but break under load — silent re dispatch on retry, models stale on serialisation, missing idempotency on payment jobs, workers leaking memory, and "we forgot ShouldQueue and the request takes 12 seconds in production."
Metadata
Version: 1.0.0
Scope: PHP / Laravel 13 + MySQL + Redis (queues), optional Horizon
Rule Count: 20 rules across 6 categories
License: MIT
How to Use
When the user asks "design this background job", "audit our queue setup", "why is this job not running", or anything queue related — work through this skill's rules as a checklist against the relevant files (job classes, config/queue.php , config/horizon.php , supervisor config, the dispatching call sites).
For audit mode, output per rule verdicts:
PASS — pattern correctly applied
FAIL — anti pattern present (with file:line + fix recommendation)
N/A — does not apply to this codebase
End with a top priority fix list (idempotency on payment jobs, missing ShouldQueue , supervisor stopwaitsecs too low — these are the most common production bite issues).
When to Apply
Reference this skill when:
Writing a new background job ( php artisan make:job )
Reviewing a PR that adds or modifies a job class
Setting up queue workers on a new server (Forge / Vapor / bare server)
Configuring config/queue.php or config/horizon.php
Debugging a stuck, looping, or repeatedly failing job
Choosing between dispatch() , dispatchSync() , dispatchAfterResponse() , Bus::batch() , Bus::chain()
Adding queue testing ( Queue::fake() , Bus::fake() )
Deciding whether to adopt Horizon
Step 1: Detect Queue Setup
Inspect:
File What to learn
config/queue.php Default connection ( QUEUE CONNECTION env), failed jobs storage, after commit setting
config/horizon.php (if present) Horizon environments, balance strategy, worker counts, timeouts
app/Jobs/ .php Job classes, ShouldQueue usage, tries / backoff , failed() methods
app/Console/Kernel.php or routes/console.php Scheduled jobs ( Schedule::job(...) , withoutOverlapping )
database/migrations/ create failed jobs table.php Failed jobs storage migration; or DynamoDB driver in config
supervisor .conf / /etc/supervisor/conf.d/ Worker process management, numprocs , max time , stopwaitsecs
Typical setups:
Stack Queue driver Failed driver Worker manager
Small Laravel + MySQL database database Supervisor (or systemd)
Production Laravel + Redis redis database (or dynamodb for serverless) Supervisor + Horizon
Laravel Vapor sqs dynamodb Vapor managed
Rule Categories by Priority
Priority Category Impact Prefix
1 Driver & Config CRITICAL config
2 Job Design CRITICAL design
3 Retry & Failure HIGH retry
4 Scaling & Workers HIGH scaling
5 Batching & Chaining HIGH bus
6 Testing & Operations MEDIUM ops
Quick Reference
1. Driver & Config (CRITICAL)
config driver choice — database for small apps; redis for production scale; sqs for Laravel Vapor
config after commit — set after commit: true to prevent dispatching jobs that reference uncommitted DB rows
config failed storage — failed jobs table is required (or DynamoDB on Vapor); set up retention/cleanup
2. Job Design (CRITICAL)
design shouldqueue — every async job MUST implement ShouldQueue (the 1 production bug: forgetting it makes the job run synchronously)
design pass ids not models — pass IDs to the constructor; refetch in handle() — avoids stale models and bloated serialised payloads
design idempotency — payment, external API, and "create resource" jobs must be safe to run twice ( ShouldBeUnique , idempotency keys, unique DB constraints)
design constructor vs handle — constructor runs at dispatch (sync); handle() runs on the worker. No DB writes or HTTP calls in the constructor.
3. Retry & Failure (HIGH)
retry tries and backoff — set both: [Backoff([1, 5, 30])] for exponential delays; default 3 tries is usually too few for transient failures
retry failed method — implement failed(Throwable $e) for permanent failure handling (alert, refund, mark as failed)
retry transient vs permanent — release($delay) for transient errors (rate limited, network); throw for permanent
retry fail on timeout — [FailOnTimeout] to avoid burning all attempts on hung jobs
4. Scaling & Workers (HIGH)
scaling supervisor config — Supervisor (or systemd) manages workers; stopwaitsecs timeout ; max time=3600 to recycle
scaling multi queue priority — high/default/low queue lanes for SLA critical jobs; queue=high,default,low
scaling worker recycling — max jobs and max time to combat memory leaks in long running workers
5. Batching & Chaining (HIGH)
bus batch vs chain — Bus::batch for parallel + progress tracking; Bus::chain for strict sequential
bus batch failure handling — allowFailures() for fault tolerant batches; use then / catch / finally callbacks
bus chunking large sets — for 1000+ items, chunk via Bus::batch(...) rather than one job per item
6. Testing & Operations (MEDIUM)
ops queue fake — Queue::fake() / Bus::fake() in tests; assertDispatched , assertPushed , assertChained , assertBatched
ops schedule queued jobs — Schedule::job(new X) everyMinute() queues the job; pair with withoutOverlapping() for safety
ops horizon when — adopt Horizon when on Redis with multiple supervisors; not for database queue or single worker setups
Essential Patterns
Minimum viable job class (Laravel 13)
Dispatching
Supervisor config (recommended)
Critical: stopwaitsecs must be greater than your longest job's timeout, or Supervisor will kill mid job on deploy.
References
[Laravel 13 — Queues](https://laravel.com/docs/13.x/queues)
[Laravel 13 — Horizon](https://laravel.com/docs/13.x/horizon)
[Laravel 13 — Task Scheduling](https://laravel.com/docs/13.x/scheduling)
[Supervisor — A Process Control System](http://supervisord.org/)
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md