Laravel's queue system enables background processing of resource-intensive operations through message queues. This approach decouples time-connsuming tasks from user requests, improving application responsiveness while maintaining data integrity.
Queue Configuration Setup
Configure Redis as the queue driver by updating the .env file:
QUEUE_CONNECTION=redis
Job Class Implementation
Create a new job using Artisan:
php artisan make:job ProcessOrder
Implement the job with custom processing logic:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use RuntimeException;
class ProcessOrder implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(private array $orderDetails)
{
\Log::info('Order processing initialized', ['order' => $this->orderDetails]);
}
public function handle(): void
{
\Log::info('Processing order batch', ['count' => count($this->orderDetails)]);
// Simulate processing delay
if (rand(1, 10) > 8) {
throw new RuntimeException('Order validation failed');
}
}
}
Failed Job Handling
Generate database migrations for queue management:
php artisan queue:table
php artisan queue:failed-table
php artisan migrate
Adjust schema configuration in AppServiceProvider when using legacy database systems:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Schema::defaultStringLength(191);
}
}
Queue Processing Commands
Start queue workers with retry configuration:
php artisan queue:work --queue=orders --tries=3
Process multiple queues simultaneously:
php artisan queue:work --queue=orders,notifications --tries=3
Failed jobs automatically appear in the failed_jobs table when exceptions occur during processing.
Dispatching Queue Jobs
Push jobs to the queue from controller methods:
<?php
namespace App\Http\Controllers;
use App\Jobs\ProcessOrder;
use Illuminate\Http\Request;
class OrderController extends Controller
{
public function submit(Request $request): void
{
$orderPayload = $request->validated();
// Execute immediately
dispatch_now(new ProcessOrder($orderPayload));
// Schedule for delayed processing
dispatch(new ProcessOrder($orderPayload))->delay(now()->addMinutes(5));
}
}
Real-Time Event Broadcasting
Laravel's broadcasting system utilizes WebSocket connections with Redis channels for real-time event distribution. The architecture separates event generation from delivery mechanisms, alowing flexible back end implementations. While Redis provides a straightforward channel implementation, RabbitMQ offers enhanced reliability features for production environments requiring guaranteed message delivery and complex routing patterns.