导语
Horizon 为 Laravel 提供了基于 Redis 的、拥有美观后台的、代码驱动配置的队列系统。Horizon 让我们可以轻松监控队列系统的关键指标,例如任务吞吐量、运行时间和失败任务等。
Laravel Horizon 是官方的扩展包,配置以及使用很简单,跟着文档就可以。
安装以及配置
composer require laravel/horizon
- 安装好之后,发布资源
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"
- 配置文件在
config/horizon.php
,可以根据需求修改
使用
- 运行
php artisan horizon
- 访问
you_site.com/horizon
就可以看到后台了 还有其他命令
- 暂停
php artisan horizon:pause
- 继续
php artisan horizon:continue
- 执行完所有任务后退出
php artisan horizon:terminate
- 暂停
部署
可以看到使用很简单,在部署的时候要注意以下几点
- 确保有
failed_jobs
数据表,相关文档可以看这里 默认情况下,只能在
local
访问,当然我们可以自定义- 首先修改
config/horizon.php
中environments
配置项。可以看到其中有local
和production
,将production
修改为线上.env
中APP_ENV
的值 - 接下来可以自定义后台的访问策略,使用
Horizon:auth
方法,return true
即可访问,否则返回403
。在app/Providers/AppServiceProvider.php
中修改如下
- 首先修改
public function boot()
{
Horizon::auth(function ($request) {
// 这里进行判断,根据需求自行选择
// 通过认证可以访问
if (Auth::check()) {
return true;
}
// 指定参数可以访问
if ($request->input('q') == 'horizon') {
return true;
}
});
}
- 使用 Supervisor 进程守护,如果是使用 Laradock,可以使用
php-worker
或者laravel-horizon
容器。配置如下,根据情况进行修改(可以参考这两篇文章,这里,那里)
[program:horizon]
process_name=%(program_name)s
command=php /var/www/you_project_path/artisan horizon
autostart=true
autorestart=true
user=laradock
redirect_stderr=true
stdout_logfile=/var/www/you_project_path/horizon.log
- 使用调度任务来生成监控,以便查看运行情况,在
app/Console/Kernel.php
修改如下
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
$schedule->command('horizon:snapshot')->everyFiveMinutes();
}