Back to Documentation
API Reference

⚙️Queue API Reference

Siro's queue system provides DB-based job processing with exponential backoff, timeouts, priority, and failed job retry.

Overview#

Siro's queue system provides DB-based job processing with exponential backoff, timeouts, priority, and failed job retry.

php
use Siro\Core\Queue;

Configuration#

env
# .env
QUEUE_DRIVER=database
QUEUE_RETRY_AFTER=60      # seconds before retry
QUEUE_MAX_ATTEMPTS=3

Create the jobs table:

bash
php siro make:queue-table
php siro migrate

Defining Jobs#

Generate#

bash
php siro make:job SendWelcomeEmail

Job Class#

php
<?php

declare(strict_types=1);

namespace App\Jobs;

use Siro\Core\Job;
use App\Models\User;

final class SendWelcomeEmail extends Job
{
    public function __construct(
        private readonly int $userId,
    ) {}

    public function handle(): void
    {
        $user = User::find($this->userId);
        if ($user === null) return;

        Mail::to($user->email)->send(new WelcomeMail($user));
    }

    public function failed(\Throwable $e): void
    {
        Logger::error('Welcome email failed', [
            'user_id' => $this->userId,
            'error' => $e->getMessage(),
        ]);
    }
}

Dispatching Jobs#

php
// Simple dispatch
Queue::push(new SendWelcomeEmail($user->id));

// Delayed dispatch (seconds)
Queue::later(3600, new SendWelcomeEmail($user->id));

// With priority (higher = sooner)
Queue::push(new SendWelcomeEmail($user->id), priority: 10);

Processing Jobs#

bash
# Process next available job
php siro queue:work

# Process continuously
php siro queue:work --daemon

# Process specific queue
php siro queue:work --queue=emails

Job Properties#

php
class SendWelcomeEmail extends Job
{
    // Max retry attempts (default: 3)
    public int $maxAttempts = 5;

    // Timeout in seconds (default: 60)
    public int $timeout = 30;

    // Priority (higher = processed first)
    public int $priority = 0;

    // Queue name
    public string $queue = 'default';
}

Failed Jobs#

bash
# List failed jobs
php siro queue:status

# Retry all failed jobs
php siro queue:retry --all

# Retry specific job
php siro queue:retry --id=42

# Clear failed jobs
php siro queue:flush

Job Lifecycle#

dispatch → push to DB → queue:work picks up → handle()
                                          ↓
                                     on success → delete from DB
                                          ↓
                                     on failure → retry? → yes → wait + retry
                                                          → no  → mark as failed

Available Methods#

MethodDescription
push(Job $job, int $delay, int $priority)Push job to queue
later(int $delay, Job $job)Push job with delay
work()Process next job
workAll()Process all available jobs
retryAll()Retry all failed jobs
failed()Get all failed jobs
flush()Clear all failed jobs
status()Queue status and stats