Claude-skill-registry laravel-queues

Implement background jobs with queues, workers, batches, chains, middleware, and failure handling. Use when processing async tasks or handling long-running operations.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/laravel-queues" ~/.claude/skills/majiayu000-claude-skill-registry-laravel-queues && rm -rf "$T"
manifest: skills/data/laravel-queues/SKILL.md
source content

Laravel Queues

Agent Workflow (MANDATORY)

Before ANY implementation, launch in parallel:

  1. fuse-ai-pilot:explore-codebase - Analyze existing job patterns
  2. fuse-ai-pilot:research-expert - Verify Queue docs via Context7
  3. mcp__context7__query-docs - Check job and worker patterns

After implementation, run fuse-ai-pilot:sniper for validation.


Overview

ComponentPurpose
JobsBackground tasks with retries, timeouts
WorkersProcess jobs from queues
BatchesGroup jobs with progress tracking
ChainsSequential job execution
MiddlewareRate limiting, deduplication
HorizonRedis queue monitoring dashboard

Decision Guide: Queue Driver

Which driver?
├── Development → sync (instant execution)
├── Small app → database (simple, no Redis)
├── Production → redis (fast, Horizon support)
├── AWS → sqs (managed, scalable)
└── High volume → redis + Horizon (monitoring)

Decision Guide: Job Design

Job type?
├── Simple async → Standard Job
├── Group processing → Batch (progress, cancel)
├── Sequential steps → Chain (A → B → C)
├── Rate limited → Middleware + RateLimiter
├── Unique execution → UniqueJob / WithoutOverlapping
└── Long running → Timeout + Retry settings

Critical Rules

  1. Use ShouldQueue for async processing
  2. Set tries and backoff for resilience
  3. Implement failed() method for error handling
  4. Use database transactions carefully with jobs
  5. Monitor with Horizon in production

Reference Guide

Concepts

TopicReferenceWhen to Consult
Jobsjobs.mdCreating job classes
Dispatchingdispatching.mdSending jobs to queues
Workersworkers.mdRunning queue workers
Batchingbatching.mdGrouping jobs
Chainingchaining.mdSequential jobs
Middlewaremiddleware.mdRate limiting, dedup
Failed Jobsfailed-jobs.mdError handling
Horizonhorizon.mdMonitoring dashboard
Testingtesting.mdJob testing
Troubleshootingtroubleshooting.mdCommon issues

Templates

TemplateWhen to Use
QueueableJob.php.mdStandard job with retries
BatchJob.php.mdBatchable job
ChainedJobs.php.mdJob chain implementation
JobMiddleware.php.mdCustom middleware
JobTest.php.mdTesting jobs

Quick Reference

Basic Job

final class ProcessOrder implements ShouldQueue
{
    use Queueable;

    public int $tries = 3;
    public int $backoff = 60;
    public int $timeout = 120;

    public function __construct(
        public readonly Order $order,
    ) {}

    public function handle(OrderService $service): void
    {
        $service->process($this->order);
    }

    public function failed(\Throwable $e): void
    {
        Log::error('Order failed', ['id' => $this->order->id]);
    }
}

Dispatch

// Immediate
ProcessOrder::dispatch($order);

// Delayed
ProcessOrder::dispatch($order)->delay(now()->addMinutes(5));

// On specific queue
ProcessOrder::dispatch($order)->onQueue('orders');

Best Practices

DO

  • Use
    final
    for job classes
  • Implement
    failed()
    method
  • Set appropriate
    timeout
    values
  • Use
    Unique
    for one-at-a-time jobs
  • Monitor with Horizon in production

DON'T

  • Dispatch inside database transactions (use
    afterCommit
    )
  • Store large objects in job properties
  • Forget to handle failures
  • Use sync driver in production