Optimiza y monitorea tus colas de trabajo en Laravel con Laravel Horizon: un panel de control claro, balanceo de workers y configuración basada en código con Redis por defecto. Aprende cómo instalarlo en Unix, activarlo con Artisan y observar en tiempo real tus jobs pendientes, completados y fallidos desde su dashboard.
¿Qué es Laravel Horizon y qué resuelve?
Laravel Horizon ofrece un panel de control y un sistema configurable de colas para Laravel. Permite ver el estado de las colas, detectar fallos y mover workers entre colas para evitar cuellos de botella mediante un balance.
Panel con dashboard para estado, métricas y actividad reciente de jobs.
Monitoreo de jobspendientes, completados y fallidos.
Balanceo de workers: cuando una cola se llena, Horizon puede mover procesos a la cola que lo necesita.
Configuración basada en código: versionable junto al proyecto.
Conexión por defecto a Redis para la ejecución de colas.
¿Cómo se instala y configura en Unix con Redis?
Requiere una extensión disponible en sistemas Unix. Se recomienda usar una máquina virtual (acceso por VSSH) para la instalación. El flujo es directo: instalar el paquete, publicar configuración y ajustar environments en el archivo de configuración.
El comando de instalación publica los archivos de configuración y el service provider.
Abre config/horizon.php y ajusta “Environments”.
Define cuántos workers usar por entorno, la conexión Redis y las colas a atender.
Selecciona el tipo de balance; en el ejemplo se usa el balance simple, con “diez procesos activos” y “ejecución hasta una vez” por trabajo.
¿Cómo se accede al panel y qué muestra?
Accede a la ruta web “/horizon”. Verás el dashboard y pestañas para monitoreo de colas, métricas y el listado de jobs (pendientes, completados y fallidos).
Estado del sistema: activo o inactivo.
Detalle por worker y procesos en ejecución.
Información de Supervisor y colas por defecto.
Para activarlo:
php artisan horizon
Este comando levanta el servicio de Horizon. Es equivalente a lo que antes se ejecutaba con “Q word”.
¿Cómo probar un job y observar resultados en el dashboard?
Crea un job y un comando para dispararlo con rapidez. Dentro del comando, usa el helperdispatch para encolar el job.
php artisan make:job TestJob
Define la firma del comando (por ejemplo, “test job”) y, si quieres, una descripción.
Al ejecutar Horizon en una terminal, corre el nuevo comando en otra para disparar el job:
php artisan test job
Verás en la terminal el procesamiento del job. En Horizon, se reflejará en la actividad de la última hora. En “completed jobs” podrás revisar sus características.
¿Cómo darle más sentido con un flujo tipo newsletter?
El comando puede disparar el job “test job” para enviar newsletters. Se invoca el comando de newsletter con una opción “-S” para que no haga preguntas y envíe directamente el correo.
El dashboard muestra el job en pendiente y luego completado.
Se visualiza el worker “Supervisor uno” con tres procesos procesando colas por defecto.
Puedes confirmar en terminal que el comando fue procesado y que se enviaron los correos.
En conjunto, dominarás: creación de eventos, uso de listeners convertidos en colas de trabajo, ejecución en segundo plano y monitoreo continuo con Laravel Horizon. ¿Qué parte del flujo te gustaría automatizar o visualizar mejor? Comparte tus dudas o tu caso y seguimos la conversación.
Telescope es excelente para monitorear todos los aspectos de nuestra aplicacion, tambien se complementa muy bien con Larvel debuggbar o con Telescope bar.
Sin embargo la utilidad que solo trae HORIZON, es poder configurar desde una archivo de configuración como vas a distribuir tus tareas, realmente la configuración. por defecto de Laravel es muy buena y en algunos contados casos seria necesario usar Horizon para configurar el funcionamiento de los queues, sin embargo cabe resalta que esta es una característica que solo este paquete ofrece.
Muchas gracias!
En caso de haber instalado la versión 7 de Laravel
Tuve el siguiente error
Se soluciona instalando como lo mencionan arriba.
composer require predis/predis
Y tambien la version 4.3 de laravel/horizon
composer require laravel/horizon:4.3
Activando Laravel Horizon, puede ser que ya no guarde mas registros en la tabla Jobs?
Asi es con Laravel Horizon, el driver se tiene que cambiar a Redis y deja de usar la Base de Datos, ahora los registros justamente se almacenan en Redis.
super util laravel horizon, laravel tiene muchas herramientas mas, es un framework muy completo
Por si a alguien le sirve, me salía el siguiente error que dejo en la imagen, lo que hice para solucionar fue correr sudo apt-get install redis-server
En el caso de querer usar database como driver en lugar de redis, es simplemente cambiar redis por database en horizon?
Hola @fenderbcn. Casi siempre una migración va a generar un esfuerzo importante, si al migrar no cambia la estructura de datos quizás se te puede hacer un poco más sencillo, pero no creo que sea nunca un paso sencillo
Hola @fenderbcn Laravel Horizon no es compatible con el driver de Database unicamente con Redis.
tengo una duda, este tema de jobs funciona con bases de datos NoSQL ejemplo mongoDB?
Hola, no conozco ningun driver para NoSQL en la actualidad.
Los disponibles son: Redis, Database, AWS, Beanstalkd.
Saludos.
No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión. [tcp://127.0.0.1:6379] no puedo acceder a horizon
que tan eficiente son esas colas de laravel ?, y me refiero por la exigencia del poder computacional para sistemas reales, se recomienda usar sqs o las colas de laravel son suficientemente eficiente. Que pasa si realizo procesos pesados a la BD que pueden tardarse hasta 10 min o mas
Laravel Horizon: Tu Panel de Control para Colas en Laravel
Laravel Horizon es una herramienta poderosa y elegante diseñada específicamente para gestionar las colas de trabajo en aplicaciones Laravel. Si estás familiarizado con las colas en Laravel, sabrás que te permiten diferir tareas que consumen mucho tiempo o que deben ejecutarse en segundo plano, como enviar correos electrónicos, generar informes o procesar pagos.
¿Qué hace especial a Horizon?
Panel de control visual: Horizon te proporciona una interfaz web intuitiva desde donde puedes monitorear en tiempo real el estado de tus colas, ver el progreso de los trabajos, y gestionar los trabajadores.
Configuración basada en código: Puedes configurar fácilmente tus colas y trabajadores directamente en tu código, lo que te permite tener un mayor control y flexibilidad.
Métricas detalladas: Horizon te ofrece una gran cantidad de métricas sobre el rendimiento de tus colas, como el tiempo de ejecución de los trabajos, el número de trabajos fallidos, y la tasa de procesamiento.
Escalado automático: Horizon puede escalar automáticamente el número de trabajadores en función de la carga de trabajo, lo que garantiza que tus trabajos se procesen de manera eficiente.
Integración con Redis: Horizon está estrechamente integrado con Redis, una base de datos en memoria muy rápida que es ideal para almacenar información sobre las colas y los trabajos.
¿Para qué sirve Horizon?
Monitorear el estado de tus colas: Ver en tiempo real qué trabajos están en cola, cuáles se están ejecutando y cuáles han fallado.
Gestionar los trabajadores: Iniciar, detener y reiniciar trabajadores de forma manual o automática.
Optimizar el rendimiento: Identificar cuellos de botella y ajustar la configuración de tus colas para mejorar el rendimiento.
Escalar tu aplicación: Asegurarte de que tus colas puedan manejar un aumento en la carga de trabajo.
Ya voy mirando las clases a modo informativo, como para conocer alguna posibilidad que no conozca con laravel, pero como curso no logré nada... ojalá lo actualicen y mejoren pronto
Estaría genial que profundiizarane los batchs de los jobs,
Como cancelar jobs y batchs
Como se podría saber quien ha creado el job, etc
muy deficiente este curso
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires laravel/horizon ^5.x-dev -> satisfiable by laravel/horizon[5.x-dev].
- laravel/horizon 5.x-dev requires illuminate/contracts ^8.0 -> found illuminate/contracts[v8.0.0, ..., 8.x-dev] but these were not loaded, likely because it conflicts with another require.
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
Redis es una base de datos en memoria, esto quiere decir que es la indicada para los jobs
Hola martin. No necesariamente también pueden almancenar los queue jobs en database (la configuras en .env).
También hay queue workers que nos dan un mejor manejo en el servidor de producción.
Una duda ese panel de Laravel Horizont es publico para cualquier usuario? o hay manera de que solo un usuario pueda usarlo o verlo eje: Admin
Mi otra duda es solo es para desarrollo ?
No se puede usar en producción que complejidad tendría si se usara en producción?