Outil de gestion des files d'attente Horizon
- Configuration
- Configuration équilibrée
- Découpage des tâches
- Configuration en attente Seuil trop long
- Tags
- Introduction
- Horizon fournit un magnifique tableau de bord et peut configurer votre file d'attente Laravel Redis via du code, et il vous permet de surveiller facilement votre système de file d'attente telles que des métriques clés telles que le débit des tâches, l'exécution et les tâches ayant échoué. Tous les éléments de configuration sont stockés dans un simple fichier de configuration, vous permettant de le placer dans le contrôle de version collaboratif de l'équipe pour faciliter la collaboration en équipe.
Installation
{note} Vous devez vous assurer que le pilote de file d'attente
redis
est défini dans le fichier de configurationqueue
.queue
配置文件中设置了redis
队列驱动。你应该使用 Composer 来安为你的 Laravel 项目安装 Horizon:
composer require laravel/horizon
安装完成后,使用
horizon:install
发布 Artisan 命令:php artisan horizon:install
你还应该创建
failed_jobs
表,Laravel 将使用该表来存储任何 失败的队列任务:php artisan queue:failed-table php artisan migrate
配置
发布 Horizon 相关文件后,他的主要配置文件会放在
config/horizon.php
。你可以在这个文件中配置队列相关选项,并且每个配置项都有详细的使用说明,请详细阅读此文件。均衡配置
Horizon 提供了三种均衡策略:
simple
,auto
, 和false
。默认的是simple
, 会将收到的任务均分给队列进程:'balance' => 'simple',
auto
策略会根据当前的工作量调整每个队列的工作进程任务数量。例如:如果notifications
队列有 1000 个待执行任务,但是你的render
队列是空的,Horizon 会分配更多的工作进程给notifications
队列,直到notifications
队列中所有任务执行完成。当配置项balance
配置为false
时,Horizon 会使用 Laravel 默认执行行为,它将按照配置中列出的顺序处理队列任务。任务修整
horizon
配置文件允许你配置应保留最近和失败任务的时间(以分钟为单位)。 默认情况下,最近的任务保留一小时,而失败的任务保留一周:'trim' => [ 'recent' => 60, 'failed' => 10080, ],
仪表盘权限验证
Horizon 仪表盘路由是
/horizon
。 默认情况下,你只能在local
环境下访问仪表盘。在你的app/Providers/HorizonServiceProvider.php
文件中,有一个gate
方法。这里授权控制 非本地 环境中对 Horizon 的访问。 你可以根据需要随意修改此门面,以限制对 Horizon 安装的访问:/** * 注册 Horizon gate 方法 * * gate 决定了谁可以在非本地环境中访问 Horizon。 * * @return void */ protected function gate(){ Gate::define('viewHorizon', function ($user) { return in_array($user->email, [ 'taylor@laravel.com', ]); }); }
运行 Horizon
当在
config/horizon.php
文件中配置好了你的队列执行进程后,你就可以使用horizon
Artisan 命令启动 Horizon。只需要一条命令语句即可启动所有配置好的队列进程:php artisan horizon
你也可以使用
horizon:pause
和horizon:continue
Artisan 命令来暂停或继续执行队列任务:php artisan horizon:pausephp artisan horizon:continue
你可以使用
Vous devez utiliser Composer pour installer Horizon pour votre projet Laravel :horizon:terminate
php artisan horizon:terminate
Une fois l'installation terminée, utilisezhorizon:install
pour émettre la commande Artisan :[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
Vous devez également créez la table < code>failed_jobs, que Laravel utilisera pour stocker tous les travaux de file d'attente ayant échoué : 🎜<?php namespace App\Jobs; use App\Video;use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; class RenderVideo implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * video 实例 * * @var \App\Video */ public $video; /** * 创建工作实例 * * @param \App\Video $video * @return void */ public function __construct(Video $video) { $this->video = $video; } /** * 执行任务 * * @return void */ public function handle() { // } }
🎜🎜🎜Configuration
🎜Après avoir publié les fichiers liés à Horizon, Son fichier de configuration principal sera placé dansconfig/horizon.php
. Vous pouvez configurer les options liées à la file d'attente dans ce fichier, et chaque élément de configuration contient des instructions d'utilisation détaillées. Veuillez lire ce fichier en détail. 🎜Configuration équilibrée
🎜Horizon propose trois stratégies d'équilibrage :simple
,auto
etfalse
. La valeur par défaut estsimple
, qui distribuera les tâches reçues de manière égale aux processus de file d'attente : 🎜$video = App\Video::find(1); App\Jobs\RenderVideo::dispatch($video);
🎜auto
La stratégie ajustera les tâches des processus de travail de chaque file d'attente en fonction du courant quantité de charge de travail. Par exemple : si la file d'attentenotifications
contient 1 000 tâches en attente, mais que votre file d'attenterender
est vide, Horizon allouera davantage de processus de travail à la file d'attentenotifications
. jusqu'à ce que toutes les tâches de la file d'attentenotifications
soient exécutées. Lorsque l'élément de configurationbalance
est configuré surfalse
, Horizon utilisera le comportement d'exécution par défaut de Laravel, qui traitera les tâches de file d'attente dans l'ordre indiqué dans la configuration. 🎜Élagage des tâches
🎜Le fichier de configurationhorizon
vous permet de configurer combien de temps (en minutes) les tâches récentes et ayant échoué doivent être conservées. Par défaut, les tâches récentes sont conservées pendant une heure et les tâches ayant échoué pendant une semaine : 🎜class RenderVideo implements ShouldQueue{ /** * 获取分配给这个任务的标签 * * @return array */ public function tags() { return ['render', 'video:'.$this->video->id]; } }
🎜🎜🎜Vérification des autorisations du tableau de bord
🎜Le routage du tableau de bord Horizon est/horizon
. Par défaut, vous ne pouvez accéder au tableau de bord que dans l'environnementlocal
. Dans votre fichierapp/Providers/HorizonServiceProvider.php
, il existe une méthodegate
. Cette subvention contrôle l'accès à Horizon dans les environnements non locaux. Vous êtes libre de modifier cette façade pour restreindre l'accès à votre installation Horizon selon vos besoins : 🎜Horizon::routeMailNotificationsTo('example@example.com'); Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel'); Horizon::routeSmsNotificationsTo('15556667777');
🎜🎜🎜🎜Exécuter Horizon🎜🎜quand vous êtes dansconfig/horizon.php
Une fois votre processus d'exécution de file d'attente configuré dans le fichier, vous pouvez démarrer Horizon à l'aide de la commandehorizon
Artisan. Une seule instruction de commande est nécessaire pour démarrer tous les processus de file d'attente configurés : 🎜'waits' => [ 'redis:default' => 60, ],
🎜Vous pouvez également utiliser les commandeshorizon:pause
ethorizon:continue
Artisan pour suspendre ou continuer l'exécution de la file d'attente. tâches : 🎜/** * 定义应用程序的任务调度 * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule){ $schedule->command('horizon:snapshot')->everyFiveMinutes(); }
🎜Vous pouvez utiliser la commandehorizon:terminate
Artisan pour terminer en douceur le processus principal Horizon. Horizon se fermera après avoir traité les tâches en cours d'exécution : 🎜rrreee🎜🎜🎜🎜Déploiement d'Horizon
Si vous déployez Horizon sur un serveur en ligne, vous devez configurer un moniteur de processus pour détecter la commande
php artisan horizon
et la redémarrer automatiquement lorsqu'elle se termine de manière inattendue. Lorsqu'un nouveau code est mis en ligne, le moniteur de processus doit mettre fin au processus Horizon et redémarrer Horizon avec le code modifié.php artisan horizon
命令,在它意外退出时自动重启。上线新代码时则需要该进程监控器终止 Horizon 进程并以修改后的代码重启 Horizon。Supervisor 配置
如果你使用 Supervisor 进程监控器管理你的
rrreeehorizon
进程,那么以下配置文件则可满足需求:{tip} 如果你不喜欢自己维护服务器,可以考虑使用 Laravel Forge,Forge 提供了运行一个带有 Horizon 的现代、强大的 Laravel 应用所需要的 PHP7+ 及其他所有环境。
标签
Horizon 允许你对任务分配「标签」,包括邮件,事件广播,通知和队列的事件监听器。事实上,Horizon 会智能并且自动根据任务携带 Eloquent 模型给大多数任务标记标签,如下任务示例:
rrreee如果该队列任务是一个携带
rrreeeid
为1
的AppVideo
实例,那么它将自动被标记上AppVideo:1
标签。因为 Horizon 会检查任务属性是否具有 Eloquent 模型,如果发现 Eloquent 模型,Horizon 将会智能的用该模型的类名和主键为任务标记上标签:自定义标签
如果你想手动的为队列执行的对象定义标签,你可以给这个类定义一个
rrreeetags
方法:通知
Note: 在使用通知之前,你应该添加
guzzlehttp/guzzle
Composer 包到你的项目。 在使用 Horizon 配置发送短信通知时,你还应该阅读 Nexmo 通知驱动的依赖条件章节。如果需要在队列等待时间过长时发起通知,可以在应用的
rrreeeAppServiceProvider
中调用Horizon::routeMailNotificationsTo
,Horizon::routeSlackNotificationsTo
, 和Horizon::routeSmsNotificationsTo
方法:配置等待时间过长的阈值
你可以在
rrreeeconfig/horizon.php
配置文件中设置等待时间过长的具体秒数。waits
配置项可以针对每一个 链接 / 队列 配置阈值:Metrics
Horizon 包含一个 Metrics 仪表盘,它可以提供任务和队列等待时间和吞吐量信息,为了填充此仪表盘,你需要配置应用的 scheduler 每五分钟运行一次 Horizon 的
snapshot
Configuration du Superviseur
Si vous utilisez le moniteur de processus Superviseur pour gérer votre processushorizon
, alors le fichier de configuration suivant peut répondre à vos besoins : 🎜rrreee🎜{tip} Si vous n'aimez pas entretenir le serveur vous-même, envisagez d'utiliser Laravel Forge qui fournit tout ce dont vous avez besoin pour exécuter une application Laravel moderne et puissante. avec Horizon PHP7+ et tous les autres environnements. 🎜
🎜🎜tags
🎜Horizon vous permet d'attribuer des "tags" aux tâches, notamment les e-mails, les diffusions d'événements, les notifications et les écouteurs d'événements en file d'attente. appareil. En fait, Horizon balisera intelligemment et automatiquement la plupart des tâches selon le modèle Eloquent porté par la tâche, comme dans l'exemple de tâche suivant : 🎜rrreee🎜Si la tâche en file d'attente est une tâche portantid
comme1
instance deAppVideo
, elle sera alors automatiquement marquée avec la baliseAppVideo:1
. Étant donné qu'Horizon vérifiera si l'attribut de tâche a un modèle Eloquent, si un modèle Eloquent est trouvé, Horizon balisera intelligemment la tâche avec le nom de classe et la clé primaire du modèle : 🎜rrreeeBalise personnalisée
🎜Si vous souhaitez Pour définir manuellement des balises pour les objets exécutés dans la file d'attente, vous pouvez définir une méthodetags
pour cette classe : 🎜rrreee🎜🎜Notifications
🎜Remarque : Avant d'utiliser les notifications, vous devez ajouter le package
🎜Si vous devez lancer une notification lorsque le temps d'attente dans la file d'attente est trop long, vous pouvez appelerguzzlehttp/guzzle
Composer à votre projet. Lorsque vous utilisez la configuration Horizon pour envoyer des notifications par SMS, vous devez également lire le Dépendances du pilote de notification NexmoChapitre . 🎜Horizon::routeMailNotificationsTo
,Horizon:: dans le
etAppServiceProvider de l'application. Méthodes
routeSlackNotificationsToHorizon::routeSmsNotificationsTo
: 🎜rrreeeConfigurer le seuil de temps d'attente excessif
🎜Vous pouvez le faire dansconfig /horizon.php
code> Définissez le nombre spécifique de secondes lorsque le temps d'attente est trop long dans le fichier de configuration. L'élément de configurationwaits
peut configurer des seuils pour chaque lien/file d'attente : 🎜rrreee🎜🎜Metrics
🎜Horizon contient un instrument Metrics Tableau de bord, qui fournit des informations sur les temps d'attente et le débit des tâches et des files d'attente. Afin de remplir ce tableau de bord, vous devez configurer le planificateur de l'application pour exécuter la commande Artisansnapshot
d'Horizon toutes les cinq minutes : 🎜rrreeeCet article a été publié pour la première fois sur le site Web LearnKu.com.
- Laravel Horizon