Surveiller les files d’attente dans Laravel : Guide étape par étape
Lorsqu’on travaille avec Laravel, il est fréquent d’utiliser des files d’attente pour gérer des tâches de manière asynchrone. Cependant, il est crucial de surveiller ces files pour éviter qu’elles ne soient surchargées. Dans cet article, nous allons voir comment mettre en place un système simple pour surveiller les files d’attente dans Laravel et recevoir des notifications lorsqu’une file dépasse un seuil critique.
Configurer la surveillance avec queue:monitor
Laravel offre une commande intégrée pour surveiller les files d’attente : queue:monitor. Elle permet de définir un seuil maximal de jobs pour des files spécifiques et d’émettre des alertes lorsque ce seuil est dépassé.
Exemple de commande :
php artisan queue:monitor redis:default,redis:deployments --max=100
Dans cet exemple, on surveille deux files, redis:default et redis:deployments, et on fixe un maximum de 100 jobs pour chacune. Si une file dépasse ce seuil, un événement sera déclenché.
Écouter l’événement QueueBusy
Laravel déclenche automatiquement l’événement QueueBusy lorsqu’une file dépasse le seuil défini. Pour capter cet événement et y réagir, ajoutez un écouteur dans le fichier AppServiceProvider.php :
Ajout de l’écouteur :
use App\Notifications\QueueHasLongWaitTime;
use Illuminate\Queue\Events\QueueBusy;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Notification;
public function boot(): void
{
Event::listen(function (QueueBusy $event) {
Notification::route('mail', '[email protected]')
->notify(new QueueHasLongWaitTime(
$event->connection,
$event->queue,
$event->size
));
});
}
Dans cet exemple, lorsqu’une file est surchargée, une notification sera envoyée à une adresse e-mail définie.
Créer une notification personnalisée
Générez une notification avec la commande Artisan suivante :
php artisan make:notification QueueHasLongWaitTime
Dans la classe générée, configurez les détails de la notification, notamment le contenu et les canaux (e-mail dans cet exemple).
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('La file d’attente est surchargée')
->line("La file '{$this->queue}' sur la connexion '{$this->connection}' a dépassé le seuil maximal.")
->line("Nombre actuel de jobs : {$this->size}.");
}
}
Ici, la notification envoie un e-mail informant du nom de la file, de la connexion concernée et du nombre de jobs.
Tester votre système
Pour vérifier que tout fonctionne, vous pouvez volontairement surcharger une file d’attente (par exemple, en ajoutant des milliers de jobs). Surveillez si l’événement est bien capté et si la notification est envoyée correctement.
Conclusion
En configurant la commande queue:monitor, en écoutant l’événement QueueBusy et en créant une notification adaptée, vous pouvez surveiller efficacement vos files d’attente dans Laravel. Ce système vous permet d’être alerté en temps réel des surcharges, vous donnant ainsi la possibilité d’intervenir rapidement pour éviter des problèmes majeurs dans votre application.