Horizon 대기열 관리 도구
ㅋㅋ >
- Horizon 배포
- ㅋㅋㅋ
- 측정항목
Laravel Horizon
Introduction
Horizon은 아름다운 대시보드를 제공하며 코드를 통해 Laravel Redis 대기열을 구성할 수 있으며 작업 처리량과 같은 주요 지표와 같은 대기열 시스템을 쉽게 모니터링할 수 있습니다. 런타임 및 실패한 작업.
모든 구성 항목은 간단한 구성 파일에 저장되므로 팀 공동 작업 버전 관리에 배치하여 팀 공동 작업을 용이하게 할 수 있습니다.
Installation
{note}
redis
큐 드라이버가queue
구성 파일에 설정되어 있는지 확인해야 합니다.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
你可以使用
Laravel 프로젝트에 Horizon을 설치하려면 Composer를 사용해야 합니다.horizon:terminate
php artisan horizon:terminate
설치가 완료된 후horizon:install
을 사용하여 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
또한 해야 합니다. Laravel이 실패한 대기열 작업을 저장하는 데 사용할 < code>failed_jobs 테이블을 생성합니다: 🎜<?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() { // } }
🎜🎜🎜구성
🎜Horizon 관련 파일을 게시한 후, 그의 기본 구성 파일은config/horizon.php
에 배치됩니다. 이 파일에서는 대기열 관련 옵션을 설정할 수 있으며, 각 구성 항목에는 자세한 사용 지침이 포함되어 있습니다. 🎜균형 구성
🎜Horizon은simple
,auto
및false
의 세 가지 균형 전략을 제공합니다. 기본값은simple
이며, 수신된 작업을 대기열 프로세스에 균등하게 분배합니다. 🎜$video = App\Video::find(1); App\Jobs\RenderVideo::dispatch($video);
🎜auto
이 전략은 현재 프로세스에 따라 각 대기열의 작업자 프로세스 작업을 조정합니다. 작업량. 예:알림
대기열에 보류 중인 작업이 1000개 있지만렌더링
대기열이 비어 있는 경우 Horizon은알림
대기열에 더 많은 작업자 프로세스를 할당합니다.알림
대기열의 모든 작업이 실행될 때까지.balance
구성 항목이false
로 구성되면 Horizon은 Laravel의 기본 실행 동작을 사용하여 구성에 나열된 순서대로 대기열 작업을 처리합니다. 🎜작업 정리
🎜horizon
구성 파일을 사용하면 최근 작업과 실패한 작업을 보관해야 하는 기간(분 단위)을 구성할 수 있습니다. 기본적으로 최근 작업은 1시간 동안 보관되고 실패한 작업은 1주일 동안 보관됩니다. 🎜class RenderVideo implements ShouldQueue{ /** * 获取分配给这个任务的标签 * * @return array */ public function tags() { return ['render', 'video:'.$this->video->id]; } }
🎜🎜🎜대시보드 권한 확인
🎜Horizon 대시보드 라우팅은입니다. /수평선
. 기본적으로로컬
환경에서만 대시보드에 액세스할 수 있습니다.app/Providers/HorizonServiceProvider.php
파일에는gate
메서드가 있습니다. 이 인증은 로컬이 아닌 환경에서 Horizon에 대한 액세스를 제어합니다. 필요에 따라 Horizon 설치에 대한 액세스를 제한하기 위해 이 Facade를 자유롭게 수정할 수 있습니다. 🎜Horizon::routeMailNotificationsTo('example@example.com'); Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel'); Horizon::routeSmsNotificationsTo('15556667777');
🎜🎜🎜🎜Running Horizon🎜🎜config/horizon.php
대기열 실행 프로세스가 파일에 구성되면horizon
Artisan 명령을 사용하여 Horizon을 시작할 수 있습니다. 구성된 모든 대기열 프로세스를 시작하려면 단 하나의 명령문만 필요합니다. 🎜'waits' => [ 'redis:default' => 60, ],
🎜horizon:pause
및horizon:continue
Artisan 명령을 사용하여 실행을 일시 중지하거나 계속할 수도 있습니다. 작업: 🎜/** * 定义应用程序的任务调度 * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule){ $schedule->command('horizon:snapshot')->everyFiveMinutes(); }
🎜horizon:terminate
Artisan 명령을 사용하여 Horizon 메인 프로세스를 정상적으로 종료할 수 있습니다. Horizon은 실행 중인 작업을 처리한 후 종료됩니다. 🎜rrreee🎜🎜🎜🎜Horizon 배포
Horizon을 온라인 서버에 배포하는 경우
php artisan horizon
명령을 감지하고 예기치 않게 종료될 때 자동으로 다시 시작하도록 프로세스 모니터를 구성해야 합니다. 새 코드가 시작되면 프로세스 모니터는 Horizon 프로세스를 종료하고 수정된 코드로 Horizon을 다시 시작해야 합니다.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
감독자 구성
감독자 프로세스 모니터를 사용하여horizon
프로세스를 관리하는 경우 다음 구성 파일이 요구 사항을 충족할 수 있습니다. 🎜rrreee🎜{tip} 서버를 직접 유지 관리하는 것을 좋아하지 않는다면 현대적이고 강력한 Laravel 애플리케이션을 실행하는 데 필요한 모든 기능을 제공하는 Laravel Forge를 사용해 보세요. Horizon. PHP7+ 및 기타 모든 환경. 🎜
🎜🎜태그
🎜Horizon을 사용하면 이메일, 이벤트 브로드캐스트, 알림 및 대기열 이벤트 리스너를 포함한 작업에 "태그"를 할당할 수 있습니다. 장치. 실제로 Horizon은 다음 작업 예에서와 같이 작업이 수행하는 Eloquent 모델에 따라 대부분의 작업에 지능적이고 자동으로 태그를 지정합니다. 🎜rrreee🎜대기열 작업이id
를1
AppVideo
인스턴스인 경우 자동으로AppVideo:1
태그로 표시됩니다. Horizon은 작업 속성에 Eloquent 모델이 있는지 확인하기 때문에 Eloquent 모델이 발견되면 Horizon은 모델의 클래스 이름과 기본 키를 사용하여 작업에 지능적으로 태그를 지정합니다. 🎜rrreee사용자 정의 태그
🎜If 대기열에서 실행되는 개체에 대한 태그를 수동으로 정의하려면 이 클래스에 대한tags
메서드를 정의하면 됩니다. 🎜rrreee🎜🎜Notifications
🎜참고: 알림을 사용하기 전에
🎜큐 대기 시간이 너무 길 때 알림을 시작해야 하는 경우 애플리케이션의guzzlehttp/guzzle
Composer 패키지를 프로젝트에 추가해야 합니다. Horizon 구성을 사용하여 SMS 알림을 보내는 경우 Nexmo 알림 드라이버 종속성장도 읽어야 합니다. . 🎜AppServiceProvider에서
및Horizon::routeMailNotificationsTo
,Horizon::을 호출할 수 있습니다.
RouteSlackNotificationsToHorizon::routeSmsNotificationsTo
메소드: 🎜rrreee과도한 대기 시간에 대한 임계값 구성
🎜이 작업은config에서 수행할 수 있습니다. /horizon.php
code> 구성 파일에서 대기 시간이 너무 길 때 특정 초 수를 설정합니다.대기
구성 항목은 각 링크/큐에 대한 임계값을 구성할 수 있습니다. 🎜rrreee🎜🎜측정항목
🎜Horizon에는 측정항목 측정기가 포함되어 있습니다. 작업 및 대기열 대기 시간과 처리량 정보를 제공하는 대시보드를 채우려면 Horizon의snapshot
Artisan 명령을 5분마다 실행하도록 애플리케이션의 스케줄러를 구성해야 합니다. 🎜rrreee이 글은 LearnKu.com 웹사이트에 처음 게시되었습니다.