LARAVEL HORIZON
Laravel Horizon es un paquete oficial de Laravel que sirve para gestionar y monitorizar colas (queues) usando Redis como driver.Características principales
- Un dashboard en la ruta "/horizon" donde se puede ver en tiempo real:
- Jobs procesados por minuto.
- Tiempos de ejecución.
- Fallos (failed jobs).
- Throughput.
- Balanceo automático de workers.
- Gráficos y métricas detalladas.
- Configuración en código (en config/horizon.php) en lugar de supervisores manuales o comandos largos de "queue:work".
- Se pueden definir múltiples entornos, colas con prioridad, cantidad de workers por cola, etc.
- Auto-escalado de workers según la carga (muy útil en producción).
- Soporte para ver y reintentar jobs fallidos directamente desde la interfaz.
Instalación
Ejecutar el comando:composer require laravel/horizon
php artisan horizon:install
- "config/horizon.php" donde se configura todo.
- Tiempos de ejecución.
Configuración básica
'environments' => [
'production' => [
'supervisor-app' => [
'connection' => 'redis',
'queue' => ['default', 'high', 'low'], // puedes tener prioridades
'balance' => 'auto', // auto-escala workers según carga
'processes' => 10, // máximo workers simultáneos
'timeout' => 120, // segundos antes de matar un job colgado
'tries' => 3, // reintentos automáticos
'memory' => 128, // MB antes de reiniciar worker
],
'supervisor-reports' => [ // otro grupo para colas específicas
'connection' => 'redis',
'queue' => ['reports'],
'balance' => 'simple',
'processes' => 5,
'timeout' => 600, // reportes pueden tardar más
],
],
'local' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default'],
'balance' => 'false',
'processes' => 3,
],
],
],
- Opciones clave de balance:auto → Horizon ajusta automáticamente la cantidad de workers según la carga (recomendado en prod).
- simple → balance básico.
- false → no balancea (manual).
Iniciar Horizon
Ejecutar el comando:php artisan horizon
El dashboard (/horizon)
- Una vez corriendo, entrar a: https://tudominio.com/horizonVerás en tiempo real:Jobs por minuto (throughput)
- Tiempo de ejecución promedio.
- Jobs fallidos (con stack trace).
- Tiempos de espera en cola.
- Gráficos históricos.
- Lista de workers activos.
- Métricas por cola.
- Posibilidad de pausar/reanudar colas.
- Retry de jobs fallidos directamente desde la UI.
$schedule->command('horizon:snapshot')->everyFiveMinutes();
Comandos útiles de Horizon
php artisan horizon // Inicia todo
php artisan horizon:pause // Pausa todos los workers
php artisan horizon:continue // Reanuda
php artisan horizon:terminate // Mata graceful todos los workers
php artisan horizon:status // Estado actual
php artisan horizon:forget {id} // Borra un failed job
php artisan horizon:clear // Limpia métricas antiguas
Ventajas principales
- Dashboard visual increíble (mejor que Telescope para queues).
- Config en código → fácil versionar, deploy, CI/CD.
- Auto-balanceo → ahorras recursos (no tienes 20 workers siempre corriendo).
- Alertas (puedes configurar notificaciones Slack si una cola se atrasa mucho).
- Tags automáticos en jobs (si usas Eloquent models, taggea por ID).
- Muy estable y mantenido por el equipo de Laravel.
Cuándo NO usarlo
- Si se usa driver database o sync → no sirve.
- Proyectos muy pequeños sin colas pesadas (puedes quedarte con queue:work).
- Si no se usa dedicado (Horizon usa una conexión especial llamada "horizon").