🎉🎉 Larasense is officially launched 🎉🎉
- Your Hub for Laravel News, Trends & Updates

Monitoring Queues in Laravel: A Step-by-Step Guide

laravel
tutorial
queues
Nabil Hassen
Nabil Hassen
Dec 24, 2024
Monitor Laravel Queues
Last updated on Dec 23, 2024
Table of contents:

Monitoring Your Queues in Laravel: A Step-by-Step Guide

When working with Laravel queues, performance can sometimes be impacted by a sudden influx of jobs. If your queue becomes overwhelmed, it can lead to extended wait times for jobs to process, which may affect your application’s responsiveness. Fortunately, Laravel offers built-in tools to help you monitor your queues and notify you if their job count exceeds a specified threshold. In this guide, we will walk through how to set up monitoring for your queues and receive notifications when they are under heavy load.

Step 1: Schedule the queue:monitor Command

To begin monitoring your queues, you need to use the queue:monitor Artisan command. This command checks the size of your queues and helps detect when they’re getting overwhelmed. You can specify which queues you want to monitor and set a threshold for the maximum number of jobs that should be allowed in each queue.

Example Command

In your terminal, run the following command to monitor specific queues:

php artisan queue:monitor redis:default,redis:deployments --max=100

This command does the following:

  • It monitors two queues: redis:default and redis:deployments.
  • It sets the threshold to 100 jobs. If either queue exceeds 100 jobs, an alert will be triggered.

However, simply running the command is not enough to send an alert when the threshold is breached. You will need to set up an event listener to trigger notifications, which we’ll cover in the next step.

Step 2: Listen for the QueueBusy Event

Laravel will dispatch a QueueBusy event when a queue exceeds the job count threshold you set using the queue:monitor command. To respond to this event and send a notification, you need to listen for it in your application’s AppServiceProvider.

Add Event Listener in AppServiceProvider

Open your AppServiceProvider.php file, which can be found in the app/Providers directory. In the boot method of this provider, you will listen for the QueueBusy event.

Here’s an example of how to do that:

use App\Notifications\QueueHasLongWaitTime;
use Illuminate\Queue\Events\QueueBusy;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Notification;
 
public function boot(): void
{
// Listen for the QueueBusy event
Event::listen(function (QueueBusy $event) {
// Send a notification when the queue is overwhelmed
Notification::route('mail', '[email protected]')
->notify(new QueueHasLongWaitTime(
$event->connection,
$event->queue,
$event->size
));
});
}

Step 3: Create the Notification Class

The next step is to create a notification class that will be used to send alerts. This class will specify how the notification is formatted and how it should be sent (e.g., via email).

Run the following Artisan command to generate the notification:

php artisan make:notification QueueHasLongWaitTime

This will create a new notification class in the app/Notifications directory. Open the newly created file and define how you want the notification to be sent.

Here’s an example of a basic notification that sends an email:

namespace App\Notifications;
 
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
 
class QueueHasLongWaitTime extends Notification
{
protected $connection;
protected $queue;
protected $size;
 
public function __construct($connection, $queue, $size)
{
$this->connection = $connection;
$this->queue = $queue;
$this->size = $size;
}
 
public function via($notifiable)
{
return ['mail'];
}
 
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Queue is Overwhelmed')
->line("The queue '{$this->queue}' on connection '{$this->connection}' has exceeded the job threshold.")
->line("Current job count: {$this->size}")
->line('Please investigate the cause of the high job count.');
}
}

This notification will send an email to the specified address with information about the queue that exceeded the job count.

Step 4: Test the Monitoring System

Now that everything is set up, it's time to test your queue monitoring system.

  1. Trigger the php artisan queue:monitor command to start monitoring the queues.
  2. Simulate a situation where the job count exceeds your specified threshold. You can either push a large number of jobs into the queue or adjust the threshold temporarily to trigger the event.
  3. Check the email inbox specified in the notification to confirm that the alert was received.

If everything is working correctly, you should see a notification email when your queue exceeds the threshold.

Conclusion

By following these steps, you can easily set up queue monitoring in Laravel and receive alerts when your queues are overwhelmed. This setup ensures you can take proactive measures to resolve issues before they impact your application’s performance. Monitoring your queues not only helps you avoid bottlenecks but also keeps you informed in real-time about potential issues.

Nabil Hassen
Nabil Hassen
Full Stack Web Developer

Stay Updated.

I'll you email you as soon as new, fresh content is published.

Thanks for subscribing to my blog.

Latest Posts

Larasenes Logo
Larasense
Stay updated on Laravel news, trends, and updates with curated content from top blogs, YouTube, and podcasts in a sleek, user-friendly design.