Qué es Horizon
Laravel Horizon es un panel de monitorización específico para las colas de Redis de Laravel. Visualiza en tiempo real el rendimiento, el tiempo de ejecución y las incidencias de los jobs, y te permite gestionar la configuración de los workers como código.Horizon es un paquete que extiende las capacidades básicas de las colas. Familiarízate primero con las colas y jobs antes de continuar. Además, necesitas Redis como backend obligatorio.
Instalación
Instala con Composer.config/horizon.php y app/Providers/HorizonServiceProvider.php.
Configuración
Estructura de config/horizon.php
config/horizon.php centraliza toda la configuración de los workers. La sección más importante es environments.
Internamente Horizon utiliza una conexión de Redis llamada
horizon. No reutilices ese nombre en config/database.php para otras conexiones.Supervisores
Cada entorno puede tener uno o varios «supervisores». Un supervisor es la unidad de gestión de un grupo de workers; puedes ejecutar varios en el mismo entorno con distintas colas, estrategias de balanceo y número de procesos.Valores por defecto
La opcióndefaults establece los valores que se aplican a todos los supervisores por defecto.
Modo mantenimiento
Cuando la aplicación está en modo mantenimiento, Horizon no procesa jobs por defecto. Para forzarlo, usa la opciónforce.
Máximo de reintentos
tries a 0 se permiten reintentos ilimitados.
Timeout de los jobs
Backoff (espera antes de reintentar)
Especifica los segundos que hay que esperar antes de reintentar tras una excepción.Estrategias de balanceo
Horizon dispone de tres estrategias de balanceo de workers.auto (por defecto)
auto (por defecto)
Ajusta automáticamente el número de workers según la carga de la cola. Con
minProcesses y maxProcesses defines el rango.time: escala en función del tiempo estimado para vaciar la cola.size: escala en función del número de jobs en la cola.
Con la estrategia
auto el orden de las colas no implica prioridad. Si necesitas forzar prioridades, utiliza varios supervisores.simple
simple
Fija el número de workers y los reparte a partes iguales entre las colas indicadas.En este ejemplo se asignan 5 procesos a
default y 5 a notifications.false (sin balanceo)
false (sin balanceo)
Prioriza estrictamente las colas en el orden en el que se enumeran. Se comporta igual que el sistema de colas por defecto de Laravel, pero escala el número de workers en función del backlog.Los jobs de la cola
default se procesarán siempre antes que los de notifications.Autorización del panel
El panel de Horizon está disponible en la ruta/horizon. En entornos locales cualquiera puede acceder por defecto, pero en producción debes restringir el acceso mediante un gate.
Edita el método gate() en app/Providers/HorizonServiceProvider.php.
Arrancar Horizon
Comandos básicos
Desarrollo local: reinicio automático
Para reiniciar Horizon automáticamente cuando cambien los archivos, utilizahorizon:listen.
Ejecución permanente con Supervisor
En producción utiliza Supervisor para mantener Horizon siempre en ejecución.Instalar Supervisor
Crear el archivo de configuración
Crea/etc/supervisor/conf.d/horizon.conf.
Arrancar Supervisor
Al desplegar
Reinicia Horizon en cada despliegue para que se apliquen los cambios.autostart=true y autorestart=true, Horizon volverá a arrancar automáticamente tras terminar.
Gestión de jobs
Etiquetas
Horizon detecta automáticamente los modelos Eloquent que reciben los jobs y les asigna etiquetas.tags().
tags().
Silenciar jobs
Los jobs que no quieras que aparezcan en la lista de «Completed Jobs» pueden silenciarse enconfig/horizon.php.
Silenced.
Métricas y monitorización
El panel de métricas de Horizon muestra el rendimiento y los tiempos de ejecución de jobs y colas. Programa un job periódico para capturar snapshots.Notificaciones ante jobs fallidos
Puedes recibir notificaciones cuando las esperas en cola se prolonguen. Configúralo en el métodoboot() de app/Providers/HorizonServiceProvider.php.
Umbrales de espera
La opciónwaits de config/horizon.php define los segundos de espera que disparan la notificación.
0 deshabilita las notificaciones para esa cola.
Gestión de jobs fallidos
Los jobs fallidos se eliminan por ID o UUID.Actualizaciones
Cuando actualices Horizon a una versión mayor, revisa siempre la guía de actualización.Páginas relacionadas
Colas y jobs
Fundamentos de las colas de Laravel: creación y despacho de jobs, procesamiento por lotes y gestión de fallos.
Redis
Configuración y uso de Redis, backend obligatorio de Horizon.