Skip to content

Quick Start

Quick Start

Get Laravel Queue Monitor up and running in 5 minutes.

Installation

composer require cboxdk/laravel-queue-monitor
php artisan vendor:publish --tag="queue-monitor-config"
php artisan migrate

That's it! Jobs are now being monitored automatically.

View Your First Job

Dispatch any job in your application:

use App\Jobs\SendWelcomeEmail;

SendWelcomeEmail::dispatch($user);

Check it was monitored:

use Cbox\LaravelQueueMonitor\Facades\LaravelQueueMonitor as QueueMonitor;

$recentJobs = QueueMonitor::getRecentJobs(10);

foreach ($recentJobs as $job) {
    echo "{$job->job_class}: {$job->status->label()}\n";
}

View Statistics

$stats = QueueMonitor::statistics();

echo "Total Jobs: {$stats['total']}\n";
echo "Success Rate: {$stats['success_rate']}%\n";
echo "Avg Duration: {$stats['avg_duration_ms']}ms\n";

Replay a Failed Job

// Find failed jobs
$failed = QueueMonitor::getFailedJobs(10);

// Replay first failed job
if ($failed->isNotEmpty()) {
    try {
        $replayData = QueueMonitor::replay($failed->first()->uuid);
        echo "Job replayed: {$replayData->newJobId}\n";
    } catch (\Exception $e) {
        echo "Replay failed: {$e->getMessage()}\n";
    }
}

Use the REST API

The package provides a complete REST API:

# List failed jobs
curl http://localhost/api/queue-monitor/jobs?statuses[]=failed

# Get job details
curl http://localhost/api/queue-monitor/jobs/{uuid}

# Replay a job
curl -X POST http://localhost/api/queue-monitor/jobs/{uuid}/replay

# Get statistics
curl http://localhost/api/queue-monitor/statistics

Filter Jobs

use Cbox\LaravelQueueMonitor\DataTransferObjects\JobFilterData;
use Cbox\LaravelQueueMonitor\Enums\JobStatus;
use Carbon\Carbon;

$filters = new JobFilterData(
    statuses: [JobStatus::FAILED],
    queues: ['emails'],
    queuedAfter: Carbon::now()->subHours(24),
    limit: 50
);

$failedEmails = QueueMonitor::getJobs($filters);

Add Tags to Jobs

Make your jobs more discoverable:

use Illuminate\Contracts\Queue\ShouldQueue;

class SendEmailJob implements ShouldQueue
{
    public function tags(): array
    {
        return ['email', 'notifications', 'high-priority'];
    }
}

Query by tags:

$filters = new JobFilterData(
    tags: ['high-priority']
);

$priorityJobs = QueueMonitor::getJobs($filters);

Schedule Automatic Pruning

Keep your database clean:

// routes/console.php
use Illuminate\Support\Facades\Schedule;

Schedule::command('queue-monitor:prune', ['--days' => 30])
    ->daily()
    ->at('02:00');

Use Artisan Commands

# View statistics in terminal
php artisan queue-monitor:stats

# Replay a job
php artisan queue-monitor:replay {uuid}

# Prune old completed jobs
php artisan queue-monitor:prune --days=30 --statuses=completed

What's Next?