Surveiller les files d’attente dans Laravel : Guide étape par étape

Surveiller les files d’attente dans Laravel : Guide étape par étape

Date de publication : 26/12/2024

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.

Vos commentaires
Aucun commentaire