Skip to main content
Back to ScopeForged

ScopeForged Documentation

Technical documentation, guides, and feature references for the ScopeForged client portal.

System & Infrastructure/Background Jobs

Background Jobs & Queue Processing Guide

Last Updated: 2026-01-10 Status: Enhanced Plan Reference: 018-background-jobs-queue-processing.md, 053-background-jobs-enhancement.md


Overview

The Background Jobs system handles asynchronous task processing using Laravel's queue system. It enables efficient handling of time-consuming operations like email sending, PDF generation, file processing, and scheduled tasks without blocking user requests. The enhanced monitoring dashboard provides real-time visibility into queue health, job metrics, and failed job management.


Table of Contents

  1. Queue Configuration
  2. Job Types
  3. How to Use
  4. Queue Monitoring Dashboard
  5. Job Metrics & Analytics
  6. Failed Job Management
  7. Priority & Throttling
  8. Technical Architecture
  9. Related Features

Queue Configuration

Queue Drivers

DriverUse CaseConfiguration
databaseDefault, reliableUses jobs table
redisHigh performanceRequires Redis
syncDevelopment/testingRuns immediately
sqsAWS productionAmazon SQS

Environment Setup

QUEUE_CONNECTION=database

# For Redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

# For SQS
SQS_KEY=your-key
SQS_SECRET=your-secret
SQS_QUEUE=your-queue
SQS_REGION=us-east-1

# Monitored Queues (comma-separated)
QUEUE_MONITORED_QUEUES=default,high,low,emails

Queue Names

QueuePurposePriority
defaultGeneral jobsNormal
highCritical jobsHigh
lowBackground tasksLow
emailsEmail sendingNormal
notificationsPush notificationsNormal

Job Types

Email Jobs

JobPurpose
SendInvoiceEmailSend invoice to client
SendNotificationEmailGeneral notifications
SendWelcomeEmailNew user welcome
SendReminderEmailPayment reminders

Processing Jobs

JobPurpose
GeneratePdfCreate PDF documents
ProcessFileUploadVirus scan, thumbnails
GenerateReportCreate reports
ExportDataLarge data exports

Scheduled Jobs

JobSchedule
SendOverdueRemindersDaily
CleanupTempFilesDaily
GenerateAnalyticsHourly
EnforceRetentionDaily

Notification Jobs

JobPurpose
BroadcastNotificationReal-time push
SendWebhookWebhook delivery
QueueNotificationBatch notifications

How to Use

Dispatching Jobs

Immediate Dispatch:

SendInvoiceEmail::dispatch($invoice);

Delayed Dispatch:

SendReminderEmail::dispatch($invoice)->delay(now()->addHours(24));

Specific Queue:

GenerateReport::dispatch($params)->onQueue('low');

Chained Jobs:

Bus::chain([
    new ProcessUpload($file),
    new GenerateThumbnail($file),
    new NotifyUser($user),
])->dispatch();

Using Job Metrics Middleware

Add the TrackJobMetrics middleware to jobs for automatic metrics collection:

use App\Jobs\Middleware\TrackJobMetrics;

class ProcessData implements ShouldQueue
{
    public function middleware(): array
    {
        return [new TrackJobMetrics()];
    }

    public function handle(): void
    {
        // Job logic
    }
}

Running Queue Workers

Development:

php artisan queue:work

Production (with options):

php artisan queue:work --queue=high,default,low --sleep=3 --tries=3

Process specific queue:

php artisan queue:work --queue=emails

Supervisor Configuration

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=4
redirect_stderr=true
stdout_logfile=/path/to/worker.log
stopwaitsecs=3600

Queue Monitoring Dashboard

Navigate to Admin → Queues to access the comprehensive monitoring dashboard.

Dashboard Features

FeatureDescription
Summary MetricsTotal jobs today, throughput, success rate, failed count
Worker StatusActive workers, memory usage, uptime
Queue ListAll queues with pending count, processing, throughput, health status
Recent ActivityLast 20 job executions with status and duration
Recent FailuresQuick view of failed jobs with error snippets

Queue Health Status

StatusCondition
healthyLow queue size, low fail rate
busyQueue size > 100
warningQueue size > 1000
criticalFail rate > 10%

Real-Time Updates

The dashboard automatically refreshes every 30 seconds via AJAX polling. Access real-time metrics at:

GET /admin/queues/realtime

Job Metrics & Analytics

Analytics Dashboard

Navigate to Admin → Queues → Analytics for detailed job analytics.

Available Periods

PeriodDescription
1hLast hour
24hLast 24 hours (default)
7dLast 7 days
30dLast 30 days

Analytics Charts

ChartDescription
Jobs Over TimeCompleted vs failed jobs hourly
Success RateDoughnut chart of completion vs failure
Jobs by QueueBar chart of job distribution
Duration by Job TypeHorizontal bar chart of avg duration

Job Type Performance Table

View detailed performance metrics per job type:

  • Total count
  • Average duration (ms)
  • Average memory (MB)
  • Fail rate (%)

Accessing Metrics Programmatically

use App\Services\Queue\QueueMetricsService;

$metrics = app(QueueMetricsService::class);

// Get summary for dashboard
$summary = $metrics->getSummary();

// Get analytics for a period
$analytics = $metrics->getJobAnalytics('24h');

// Get queue-specific metrics
$queueMetrics = $metrics->getQueueMetrics('high');

// Get hourly throughput
$throughput = $metrics->getThroughput('default');

Failed Job Management

Navigate to Admin → Queues → Failed Jobs for comprehensive failed job management.

Failed Jobs Dashboard

FeatureDescription
StatisticsTotal failed, today, this week
Top ErrorsMost common error messages
FilteringBy queue, search by payload/exception
Bulk ActionsRetry selected, delete selected

Individual Job Details

View detailed information for each failed job:

  • Job UUID, queue, connection
  • Failure timestamp
  • Full exception with stack trace
  • Job payload (JSON formatted)
  • Related failures for same job type

Actions

ActionDescription
RetryQueue job for retry
Retry AllRetry all failed jobs
DeleteRemove single failed job
Delete SelectedRemove multiple selected jobs
Flush AllDelete all failed jobs

Artisan Commands

# View failed jobs
php artisan queue:failed

# Retry specific job
php artisan queue:retry {uuid}

# Retry all failed
php artisan queue:retry all

# Clear all failed
php artisan queue:flush

Priority & Throttling

Navigate to Admin → Queues → Priorities for queue and throttle configuration.

Queue Priority

  • Drag-and-drop to reorder queue priority
  • Higher priority queues are processed first
  • Configure workers per queue
  • Pause/resume individual queues

Rate Limiting

Configure rate limits for specific job classes:

SettingDescription
Max Per MinuteMaximum jobs per minute
Max ConcurrentMaximum simultaneous executions

Programmatic Configuration

use App\Models\QueueConfig;
use App\Models\JobThrottle;

// Set queue priority and workers
$config = QueueConfig::forQueue('high');
$config->update([
    'priority' => 10,
    'workers' => 3,
    'is_paused' => false,
]);

// Add job throttle
JobThrottle::create([
    'job_class' => 'App\Jobs\SendEmail',
    'per_minute' => 60,
    'concurrent' => 5,
]);

Technical Architecture

Service Classes

ServicePurpose
QueueMonitorServiceQueue status, worker info, recent jobs
QueueMetricsServiceJob metrics recording, analytics

Models

ModelDescription
JobMetricIndividual job execution metrics
QueueConfigQueue priority and worker settings
JobThrottleRate limit configurations

Database Schema

Table: job_metrics

ColumnTypeDescription
idbigintPrimary key
job_iduuidUnique job identifier
queuestringQueue name
job_classstringFully qualified class name
statusstringqueued/processing/completed/failed
queued_attimestampWhen job was queued
started_attimestampWhen processing started
completed_attimestampWhen job completed
duration_msfloatExecution duration
memory_mbfloatMemory usage
exceptiontextError message if failed

Table: queue_configs

ColumnTypeDescription
idbigintPrimary key
namestringQueue name
priorityintegerProcessing priority
workersintegerWorker count
is_pausedbooleanQueue paused status
settingsjsonAdditional settings

Table: job_throttles

ColumnTypeDescription
idbigintPrimary key
job_classstringJob class name
per_minuteintegerMax per minute
concurrentintegerMax concurrent
is_activebooleanThrottle active

Routes

RouteDescription
GET /admin/queuesDashboard
GET /admin/queues/analyticsAnalytics view
GET /admin/queues/prioritiesPriority config
GET /admin/queues/{queue}Queue details
POST /admin/queues/{queue}/toggle-pausePause/resume queue
GET /admin/failed-jobsFailed jobs list
GET /admin/failed-jobs/{uuid}Failed job details
POST /admin/failed-jobs/{uuid}/retryRetry failed job

Middleware

The TrackJobMetrics middleware automatically records:

  • Job start time and class
  • Completion status and duration
  • Memory usage
  • Exception messages for failures

Best Practices

For Reliability

  1. Set appropriate timeouts for job execution
  2. Use unique job IDs to prevent duplicates
  3. Implement idempotency for retryable jobs
  4. Log job progress for debugging
  5. Handle failures gracefully
  6. Use metrics middleware for visibility

For Performance

  1. Use appropriate queues for job priority
  2. Batch similar operations together
  3. Avoid serializing large objects
  4. Set reasonable retry limits
  5. Monitor queue depth and scale workers
  6. Configure throttles for rate-limited APIs

For Monitoring

  1. Check dashboard daily for queue health
  2. Set up alerts for high failure rates
  3. Review analytics for performance trends
  4. Address failed jobs promptly
  5. Tune throttles based on external API limits

Troubleshooting

IssueSolution
Jobs not processingCheck queue worker is running
Jobs failing silentlyCheck failed_jobs table
Memory issuesRestart workers with --max-jobs
Timeout errorsIncrease $timeout property
Duplicate jobsImplement ShouldBeUnique
High fail rateCheck exception patterns in analytics
Queue backlogIncrease worker count in config

Debug Mode

# Run single job for debugging
php artisan queue:work --once

# View job payload
php artisan queue:failed --json

Dependencies

FeatureRelationship
NotificationsEmail queuing
WebhooksWebhook delivery
ReportsReport generation

Complementary Features

FeatureDescription
Admin ToolsQueue management
Activity LoggingJob logging
Performance CachingCache warming

See Also