Nuestro grupo de especialistas pasados varios días de trabajo y de juntar de datos, encontramos la solución, nuestro deseo es que te resulte útil en tu proyecto.
- Introducción
- Instalación
- Configuración
- Autorización del panel
- Actualización de Horizon
- Ejecutando Horizon
- Implementación de Horizon
- Etiquetas
- Notificaciones
- Métrica
- Eliminación de trabajos fallidos
- Borrar trabajos de las colas
Introducción
Horizon proporciona un hermoso panel de control y una configuración basada en código para sus colas de Redis impulsadas por Laravel. Horizon le permite monitorear fácilmente key métricas de su sistema de colas, como el rendimiento del trabajo, el tiempo de ejecución y las fallas del trabajo.
Toda la configuración de su trabajador se almacena en un solo archivo de configuración simple, lo que permite que su configuración permanezca en el control de la fuente donde todo su equipo puede colaborar.
Instalación
Debe asegurarse de que su conexión de cola esté configurada en
redis
en tusqueue
archivo de configuración.
Puede usar Composer para instalar Horizon en su proyecto de Laravel:
composer require laravel/horizon
Después de instalar Horizon, publique sus activos usando el horizon:install
Mando artesano:
php artisan horizon:install
Configuración
Después de publicar los activos de Horizon, su archivo de configuración principal se ubicará en config/horizon.php
. Este archivo de configuración le permite configurar sus opciones de trabajador y cada opción de configuración incluye una descripción de su propósito, así que asegúrese de explorar este archivo a fondo.
Debe asegurarse de que
environments
parte de tuhorizon
El archivo de configuración contiene una entrada para cada entorno en el que planea ejecutar Horizon.
Opciones de saldo
Horizon le permite elegir entre tres estrategias de equilibrio: simple
, auto
, y false
. los simple
La estrategia, que es la predeterminada del archivo de configuración, divide los trabajos entrantes de manera uniforme entre los procesos:
'balance'=>'simple',
los auto
La estrategia ajusta el número de procesos de trabajo por cola en función de la carga de trabajo actual de la cola. Por ejemplo, si tu notifications
la cola tiene 1,000 trabajos en espera mientras su render
la cola está vacía, Horizon asignará más trabajadores a su notifications
cola hasta que esté vacía. Cuando el balance
la opción está configurada en false
, se utilizará el comportamiento predeterminado de Laravel, que procesa las colas en el orden en que se enumeran en su configuración.
Al usar el auto
estrategia, puede definir la minProcesses
y maxProcesses
opciones de configuración para controlar el número mínimo y máximo de procesos que Horizon debe escalar hacia arriba y hacia abajo para:
'environments'=>['production'=>['supervisor-1'=>['connection'=>'redis','queue'=>['default'],'balance'=>'auto','minProcesses'=>1,'maxProcesses'=>10,'balanceMaxShift'=>1,'balanceCooldown'=>3,'tries'=>3,],],],
los balanceMaxShift
y balanceCooldown
valores de configuración para determinar la rapidez con la que Horizon escalará para satisfacer la demanda de los trabajadores. En el ejemplo anterior, se creará o destruirá un máximo de un proceso nuevo cada tres segundos. Puede modificar estos valores según sea necesario en función de las necesidades de su aplicación.
Recorte de trabajos
los horizon
El archivo de configuración le permite configurar cuánto tiempo deben persistir los trabajos recientes y fallidos (en minutos). De forma predeterminada, los trabajos recientes se conservan durante una hora, mientras que los trabajos fallidos se conservan durante una semana:
'trim'=>['recent'=>60,'failed'=>10080,],
Autorización del panel
Horizon expone un tablero en /horizon
. De forma predeterminada, solo podrá acceder a este panel en el local
medio ambiente. Dentro de tu app/Providers/HorizonServiceProvider.php
archivo, hay un gate
método. Esta puerta de autorización controla el acceso a Horizon en no local Ambientes. Puede modificar esta puerta según sea necesario para restringir el acceso a su instalación de Horizon:
/** * Register the Horizon gate. * * This gate determines who can access Horizon in non-local environments. * * @return void */protectedfunctiongate()Gate::define('viewHorizon',function($user)returnin_array($user->email,['[email protected]',]););
Recuerda que Laravel inyecta el autenticado usuario a la puerta de forma automática. Si su aplicación proporciona seguridad de Horizon a través de otro método, como restricciones de IP, es posible que sus usuarios de Horizon no necesiten “iniciar sesión”. Por lo tanto, necesitará cambiar
function ($user)
arriba afunction ($user = null)
para obligar a Laravel a no requerir autenticación.
Actualización de Horizon
Al actualizar a una nueva versión principal de Horizon, es importante que revise detenidamente la guía de actualización
Además, al actualizar a cualquier nueva versión de Horizon, debe volver a publicar los activos de Horizon:
php artisan horizon:publish
Para mantener los activos actualizados y evitar problemas en futuras actualizaciones, puede agregar el comando al post-update-cmd
guiones en tu composer.json
expediente:
"scripts":"post-update-cmd":["@php artisan horizon:publish --ansi"]
Ejecutando Horizonte
Una vez que haya configurado sus trabajadores en el config/horizon.php
archivo de configuración, puede iniciar Horizon usando el horizon
Mando artesanal. Este único comando iniciará todos sus trabajadores configurados:
php artisan horizon
Puede pausar el proceso de Horizon e indicarle que continúe procesando trabajos mediante el horizon:pause
y horizon:continue
Comandos artesanos:
php artisan horizon:pause php artisan horizon:continue
También puede pausar y continuar supervisores específicos de Horizon (grupos de trabajadores) mediante el horizon:pause-supervisor
y horizon:continue-supervisor
Comandos artesanos:
php artisan horizon:pause-supervisor supervisor-1 php artisan horizon:continue-supervisor supervisor-1
Puede verificar el estado actual del proceso de Horizon usando el horizon:status
Mando artesano:
php artisan horizon:status
Puede finalizar correctamente el proceso maestro de Horizon en su máquina utilizando el horizon:terminate
Mando artesanal. Todos los trabajos que Horizon esté procesando actualmente se completarán y luego Horizon se cerrará:
php artisan horizon:terminate
Implementación de Horizon
Si está implementando Horizon en un servidor en vivo, debe configurar un monitor de proceso para monitorear el php artisan horizon
y reinícielo si se cierra inesperadamente. Al implementar código nuevo en su servidor, deberá indicarle al proceso maestro de Horizon que finalice para que su supervisor de procesos pueda reiniciarlo y recibir los cambios de código.
Supervisor de instalación
Supervisor es un monitor de proceso para el sistema operativo Linux y reiniciará automáticamente su horizon
proceso si falla. Para instalar Supervisor en Ubuntu, puede usar el siguiente comando:
sudo apt-get install supervisor
Si configurar Supervisor usted mismo suena abrumador, considere usar Forja de Laravel, que instalará y configurará Supervisor automáticamente para sus proyectos de Laravel.
Configuración del supervisor
Los archivos de configuración del supervisor normalmente se almacenan en el /etc/supervisor/conf.d
directorio. Dentro de este directorio, puede crear cualquier número de archivos de configuración que indiquen al supervisor cómo se deben monitorear sus procesos. Por ejemplo, creemos un horizon.conf
archivo que inicia y supervisa un horizon
proceso:
[program:horizon] process_name=%(program_name)s command=php /home/forge/app.com/artisan horizon autostart=true autorestart=true user=forge redirect_stderr=true stdout_logfile=/home/forge/app.com/horizon.log stopwaitsecs=3600
Debe asegurarse de que el valor de
stopwaitsecs
es mayor que el número de segundos consumidos por su trabajo de ejecución más larga. De lo contrario, Supervisor puede finalizar el trabajo antes de que termine de procesarse.
Supervisor inicial
Una vez que se ha creado el archivo de configuración, puede actualizar la configuración del Supervisor e iniciar los procesos usando los siguientes comandos:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start horizon
Para obtener más información sobre Supervisor, consulte el Documentación del supervisor.
Etiquetas
Horizon le permite asignar “etiquetas” a los trabajos, incluidos los mensajes por correo, las transmisiones de eventos, las notificaciones y los oyentes de eventos en cola. De hecho, Horizon etiquetará de forma inteligente y automática la mayoría de los trabajos según los modelos de Eloquent que se adjuntan al trabajo. Por ejemplo, eche un vistazo al siguiente trabajo:
namespaceAppJobs;useAppModelsVideo;useIlluminateBusQueueable;useIlluminateContractsQueueShouldQueue;useIlluminateFoundationBusDispatchable;useIlluminateQueueInteractsWithQueue;useIlluminateQueueSerializesModels;classRenderVideoimplementsShouldQueueuseDispatchable, InteractsWithQueue, Queueable, SerializesModels;/**
* The video instance.
*
* @var AppModelsVideo
*/public$video;/**
* Create a new job instance.
*
* @param AppModelsVideo $video
* @return void
*/publicfunction__construct(Video$video)$this->video=$video;/**
* Execute the job.
*
* @return void
*/publicfunctionhandle()//
Si este trabajo está en cola con un AppModelsVideo
instancia que tiene una id
de 1
, recibirá automáticamente la etiqueta AppModelsVideo:1
. Esto se debe a que Horizon examinará las propiedades del trabajo para cualquier modelo de Eloquent. Si se encuentran modelos Eloquent, Horizon etiquetará inteligentemente el trabajo usando el nombre de clase del modelo y el key:
$video=AppModelsVideo::find(1);AppJobsRenderVideo::dispatch($video);
Etiquetado manual
Si desea definir manualmente las etiquetas para uno de sus objetos en cola, puede definir un tags
método en la clase:
classRenderVideoimplementsShouldQueue/** * Get the tags that should be assigned to the job. * * @return array */publicfunctiontags()return['render','video:'.$this->video->id];
Notificaciones
Nota: Al configurar Horizon para enviar notificaciones de Slack o SMS, debe revisar los requisitos previos para el controlador de notificación relevante.
Si desea recibir una notificación cuando una de sus colas tenga un tiempo de espera prolongado, puede utilizar el Horizon::routeMailNotificationsTo
, Horizon::routeSlackNotificationsTo
, y Horizon::routeSmsNotificationsTo
métodos. Puede llamar a estos métodos desde el HorizonServiceProvider
:
Horizon::routeMailNotificationsTo('[email protected]');Horizon::routeSlackNotificationsTo('slack-webhook-url','#channel');Horizon::routeSmsNotificationsTo('15556667777');
Configuración de umbrales de tiempo de espera de notificación
Puede configurar cuántos segundos se consideran una “larga espera” dentro de su config/horizon.php
archivo de configuración. los waits
La opción de configuración dentro de este archivo le permite controlar el umbral de larga espera para cada combinación de conexión / cola:
'waits'=>['redis:default'=>60,'redis:critical,high'=>90,],
Métrica
Horizon incluye un panel de métricas que proporciona información sobre su trabajo y los tiempos de espera y el rendimiento de la cola. Para completar este tablero, debe configurar Horizon snapshot
Comando Artisan para ejecutarse cada cinco minutos a través del programador de su aplicación:
/** * Define the application's command schedule. * * @param IlluminateConsoleSchedulingSchedule $schedule * @return void */protectedfunctionschedule(Schedule$schedule)$schedule->command('horizon:snapshot')->everyFiveMinutes();
Eliminación de trabajos fallidos
Si desea eliminar un trabajo fallido, puede utilizar el horizon:forget
mando. los horizon:forget
El comando acepta el ID del trabajo fallido como su único argumento:
php artisan horizon:forget 5
Borrar trabajos de las colas
Si desea eliminar todos los trabajos de la cola predeterminada, puede hacerlo utilizando el horizon:clear
Mando artesano:
php artisan horizon:clear
También puede proporcionar el queue
opción para eliminar trabajos de una cola específica:
php artisan horizon:clear --queue=emails
Recuerda que te concedemos agregar una reseña si te fue de ayuda.