
Compartir:
Husband to @abigailotwell. Web Developer. Founder of Laravel, Forge, Envoyer, Spark, and more.
Notificaciones de tiempo de espera en cola con Nexmo y Laravel Horizon
Las aplicaciones web necesitan realizar tareas de alto coste computacional que consumen mucho tiempo, como enviar correos electrónicos, procesar archivos cargados o llamar a API. Realizar estas tareas durante la solicitud web de un usuario puede hacer que su aplicación web parezca lenta y torpe, lo que resulta frustrante para los usuarios.
Así, en lugar de realizar estas tareas durante una petición web, se pueden añadir a una cola de trabajos que son procesados más tarde por "workers" en cola. Fuera de la caja, el framework Laravel incluye soporte para trabajos en cola y el inicio de los trabajadores para procesar esos trabajos. Además, el framework Laravel Horizon aumenta el sistema de colas de Laravel añadiendo una interfaz de usuario para la supervisión de colas, el equilibrio de carga de los trabajadores, etc. Horizon utiliza Redisun potente almacén de datos de código abierto, para realizar un seguimiento de los trabajos pendientes, procesados y fallidos, así como de métricas como el tiempo medio de procesamiento de los trabajos y el tiempo de espera en cola.
Sin embargo, una vez que tu aplicación aprovecha las colas en segundo plano, los picos de tráfico pueden hacer que los trabajos se acumulen rápidamente en la cola. Si no tienes suficientes trabajadores asignados a esa cola, los trabajos tendrán una larga espera en la cola antes de ser procesados.
¡Nexmo al rescate! Aprovechando los eventos y servicios de notificación incorporados en Laravel Horizon, podemos ordenar a Horizon que envíe un mensaje SMS a nuestro teléfono cuando el tiempo de espera de nuestra cola esté por encima de un umbral determinado que especifiquemos.
Instalación y configuración de Nexmo Client
En primer lugar, vamos a configurar el servicio Nexmo para nuestra aplicación. Los servicios de notificación de Laravel ya tienen soporte incorporado para el envío de mensajes SMS utilizando Nexmo. Sin embargo, tenemos que añadir algunas líneas de configuración a nuestro archivo de configuración config/services.php archivo de configuración:
'nexmo' => [
'key' => env('NEXMO_KEY'),
'secret' => env('NEXMO_SECRET'),
'sms_from' => 'virtual-phone-number',
],
Una vez que estas opciones de configuración se han añadido a su config/services.php debe asegurarse de que las etiquetas NEXMO_KEY y NEXMO_SECRET se añadan al archivo .env de su aplicación. Estos valores de configuración pueden ser recuperados de su Configuración de la cuenta de Nexmo.
Además, el valor de sms_from para que coincida con el número de uno de sus números virtuales Nexmo. Este es el número de teléfono desde el que se enviarán sus mensajes SMS.
A continuación, tenemos que instalar el paquete nexmo/client en nuestra aplicación mediante Composer. Podemos hacerlo utilizando el comando "composer require" en nuestro terminal:
composer require nexmo/clientGenial. Hemos instalado y configurado el cliente Nexmo. A continuación, vamos a instalar Horizon.
Instalación y configuración de Laravel Horizon
Para instalar Laravel Horizon, usaremos Composer para instalar el paquete laravel/horizon paquete:
composer require laravel/horizonDespués de que Composer termine de instalar Horizon, necesitamos publicar los archivos de configuración de Horizon. Podemos hacer esto usando el comando de Laravel vendor:publish Artisan CLI de Laravel:
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"Horizon ya está instalado. Pero, antes de seguir adelante, debe asegurarse de que la default en su archivo de configuración config/queue.php esté configurada como redis.
Configuración Umbrales de tiempo de espera
A continuación, estamos listos para configurar nuestro umbral de tiempo de espera en cola. Si nuestro tiempo de espera en cola supera este umbral, queremos recibir un mensaje SMS alertándonos de la situación. La opción de configuración wait dentro del archivo de configuración config/horizon.php nos permite especificar nuestro umbral máximo de tiempo de espera en la cola en segundos. Por defecto, este umbral está fijado en 60 segundos; sin embargo, usted es libre de modificar este valor en función de las necesidades de su aplicación.
'waits' => [
'redis:default' => 60,
],
Configuración de la notificación por SMS de Nexmo
Por último, estamos listos para ordenar a Horizon que envíe realmente el mensaje SMS cuando se supere el umbral de tiempo de espera en cola. Dentro del método boot de la clase AppServiceProvider de nuestra aplicación, añadamos la siguiente línea de código:
\Laravel\Horizon\Horizon::routeSmsNotificationsTo(
'your-phone-number'
);Por supuesto, your-phone-number debe sustituirse por el número de teléfono al que debe enviarse la notificación por SMS del tiempo de espera.
Ya está. Cuando se supere el tiempo de espera en cola de nuestra aplicación, recibiremos un SMS a través de Nexmo alertándonos del largo tiempo de espera. En respuesta, podemos aumentar rápidamente nuestra capacidad de trabajadores en cola y resolver el problema.
Una aplicación de demostración que utiliza Horizon y Nexmo está disponible en mi GitHub.