https://d226lax1qjow5r.cloudfront.net/blog/blogposts/queue-notifications-nexmo-laravel-horizon-dr/Queue-wait-time-notifications.png

Notifications de temps d'attente avec Nexmo et Laravel Horizon

Publié le May 4, 2021

Temps de lecture : 3 minutes

Les applications web doivent effectuer des tâches coûteuses en temps de calcul, comme l'envoi d'e-mails, le traitement de fichiers téléchargés ou l'appel d'API. L'exécution de ces tâches pendant la requête web d'un utilisateur peut donner à votre application web une impression de lenteur et de lourdeur, ce qui est frustrant pour les utilisateurs.

Ainsi, au lieu d'effectuer ces tâches lors d'une requête web, elles peuvent être ajoutées à une file d'attente de travaux qui seront traités ultérieurement par des "travailleurs" de la file d'attente. Le framework Laravel prend en charge les travaux en file d'attente et le lancement de travailleurs pour traiter ces travaux. En outre, l'outil Laravel Horizon complète le système de file d'attente de Laravel en ajoutant une interface utilisateur pour la surveillance de la file d'attente, l'équilibrage de la charge des travailleurs, etc. Horizon utilise Redisun puissant entrepôt de données open-source, pour suivre les travaux en attente, traités et échoués, ainsi que des mesures telles que le temps moyen de traitement des travaux et le temps d'attente dans la file d'attente.

Cependant, lorsque votre application exploite les files d'attente en arrière-plan, les pics de trafic peuvent entraîner une accumulation rapide des travaux dans la file d'attente. Si vous ne disposez pas d'un nombre suffisant de travailleurs affectés à cette file d'attente, les travaux devront attendre longtemps avant d'être traités.

Nexmo à la rescousse ! En exploitant les événements et les services de notification intégrés à Laravel Horizon, nous pouvons demander à Horizon d'envoyer un SMS sur notre téléphone lorsque le temps d'attente de notre file d'attente est supérieur à un seuil donné que nous spécifions.

Installation et configuration du client Nexmo

Tout d'abord, configurons le service Nexmo pour notre application. Les services de notification de Laravel disposent déjà d'une prise en charge intégrée pour l'envoi de SMS à l'aide de Nexmo. Cependant, nous devons ajouter quelques lignes de configuration à notre fichier de configuration config/services.php fichier de configuration :

'nexmo' => [
    'key' => env('NEXMO_KEY'),
    'secret' => env('NEXMO_SECRET'),
    'sms_from' => 'virtual-phone-number',
],

Une fois que ces options de configuration ont été ajoutées à votre fichier de configuration config/services.php il faut s'assurer que les options de configuration NEXMO_KEY et NEXMO_SECRET soient ajoutées aux variables d'environnement de votre application. .env de votre application. Ces valeurs de configuration peuvent être récupérées dans les paramètres de votre compte paramètres de votre Account Nexmo.

En outre, la valeur de configuration sms_from doit être modifiée pour correspondre au numéro d'un de vos numéros virtuels Nexmo. Il s'agit du numéro de téléphone à partir duquel vos SMS seront envoyés.

Ensuite, nous devons installer le paquetage nexmo/client dans notre application à l'aide de Composer. Nous pouvons le faire en utilisant la commande "composer require" dans notre terminal :

composer require nexmo/client

Très bien ! Nous avons installé et configuré le client Nexmo. Ensuite, installons Horizon.

Installation et configuration de Laravel Horizon

Pour installer Laravel Horizon, nous allons utiliser Composer pour installer le paquetage laravel/horizon paquetage :

composer require laravel/horizon

Une fois que Composer a terminé l'installation d'Horizon, nous devons publier les fichiers de configuration d'Horizon. Nous pouvons le faire en utilisant la commande Laravel vendor:publish Artisan de Laravel :

php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"

Horizon est maintenant installé ! Mais avant de continuer, vous devez vous assurer que la configuration des pilotes dans votre système d'exploitation est correcte. default dans votre fichier de configuration config/queue.php est réglé sur redis.

Configuration des seuils de temps d'attente

Ensuite, nous sommes prêts à configurer notre seuil de temps d'attente dans la file d'attente. Si le temps d'attente dans la file d'attente dépasse ce seuil, nous voulons recevoir un SMS nous avertissant de la situation. L'option de configuration wait dans le fichier de configuration config/horizon.php nous permet de spécifier notre seuil maximum de temps d'attente dans la file d'attente en secondes. Par défaut, ce seuil est fixé à 60 secondes ; vous êtes toutefois libre de modifier cette valeur en fonction des besoins de votre application.

'waits' => [
    'redis:default' => 60,
],

Configuration de la notification par SMS de Nexmo

Enfin, nous sommes prêts à demander à Horizon d'envoyer le SMS lorsque le seuil du temps d'attente est dépassé. Dans la méthode boot de la classe AppServiceProvider de notre application, ajoutons la ligne de code suivante :

\Laravel\Horizon\Horizon::routeSmsNotificationsTo(
    'your-phone-number'
);

Bien entendu, your-phone-number doit être remplacé par le numéro de téléphone auquel la notification par SMS du temps d'attente doit être envoyée.

Et voilà ! Lorsque le temps d'attente de la file d'attente de notre application est dépassé, nous recevrons un SMS via Nexmo nous alertant du long temps d'attente. En réponse, nous pouvons rapidement augmenter la capacité de notre file d'attente et résoudre le problème !

Une application de démonstration qui utilise Horizon et Nexmo est disponible sur mon GitHub.

Partager:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Taylor Otwell

Husband to @abigailotwell. Web Developer. Founder of Laravel, Forge, Envoyer, Spark, and more.