Laravel Horizon 简介
文章翻译&整理自 Taylor 的 博客文章
Taylor 在今天发布了一个新工具:Laravel Horizon ,它为 Laravel Redis 队列提供了一个漂亮的仪表板和代码驱动的配置系统。此工具完全开源,你可以在 GitHub 上找到它。
此工具需要尚未正式发版的 Laravel 5.5 ,并且其本身也还处于 Beta 状态。
仪表板
Horizon 的仪表板是一个 Vue 单页应用,可以使用命令 composer require laravel/horizon
直接安装进已有的应用中。它提供队列工作负载、最近作业、失败作业、作业重试、吞吐量和运行时指标、进程计数的实时显示。
仪表板的身份验证,可以通过 Horizon::auth
注册回调函数来完全控制:
Horizon::auth(function ($request) {
// return true / false;
});
配置
与 Laravel 的调度程序类似,你所有队列 worker 的配置都在你的代码之中:
在代码库中进行此配置意味着这些都将在源代码版本控制之中,使你的团队可以轻松协作。在 config/horizon.php
文件中,我可以配置我想创建多少个进程、队列超时时间,和所有通常我需要传递给 queue:work
命令的设置。
然后,只需一个简单的命令 php artisan horizon
即可启动所有的队列 worker 。不需要其他的命令选项,此命令会读取 Horizon 配置并提供所需要的工作进程。
Horizon 被安装并部署到生产环境中之后,你可以通过修改配置文件并重新部署,来修改 worker 配置。
失败的任务
Horizon 提供了一个清晰、详细的界面来查看和重试失败任务(是的,我们都有失败的任务)。你可以查看任务的异常堆栈、标签、最近重试的任务。将最近重试的任务直接显示在失败的任务详情页上,真的非常棒。因为重试与原始失败的任务相关联,所以你不再需要在终端中盲目的反复尝试 queue:retry
来重启任务,以确定任务成功还是再次失败:
标签监控
Horizon 允许你为任务分配标签,包括:邮件、广播、通知和队列监控器。事实上,Horizon 可以根据附加到任务上的 Eloquent 模型,智能地自动分配绝大多数标签。
通过标签,你可以轻松的搜索到你的任务:回顾指定客户的所有任务、或者你应用中其他实体的所有任务。此功能可以让你关注高价值客户:
负载平衡
Horizon 会根据队列的工作负载自动平衡队列的工作进程。例如,当你的“默认”队列为空,但是“通知”队列被任务填满时。Horizon 可以自动的将备用 worker 分配到“通知“队列中,以帮助快速处理这些任务。
等到队列进度被赶上时,Horizon 会确保所有的进程被公平的重新分配。
性能度量
Horizon 提供吞吐量和平均运行时间的图表,允许你查看单个任务或者整个队列的吞吐量和运行时趋势。这些度量快照是使用命令 horizon:snapshot
捕获的,它可以使用 Laravel 内置调度每分钟运行一次,方便你在部署之后快速查找性能下降的原因。
通知
当你的队列过满时,Horizon 可以向你发送 SMS 和 Slack 通知。你可以配置等待时间阈值,以确定何时发送通知。这意味着你总是可以清楚的知道,你的队列何时需要更多的 worker 。收到通知之后,Horizon 的代码驱动配置让你可以快速更改配置以添加更多的 worker。
其他
Taylor 在最后感谢了 Horizon 的贡献者: Mohamed Said、David Hemphill 和 Steve Schoger 。
本作品采用《CC 协议》,转载必须注明作者和本文链接
@茄子 我可以转到我的公众号不
@overtrue 当然可以,超哥随便转
@茄子 :heart:
到时候有中文版的嘛
php 7.1+
太棒了!
@redrain only linux
这个好像需要php 的 pcntl 扩展,但是win下面好像没有,是不是代表着laravel5.5不能在win下面做开发了。
@森林 :smile:
@茄子 好的 :smile:
问下 这个应该写到 哪个文件里啊
Horizon::auth(function ($request) {
// return true / false;
});
@chiefyang 在路由定义文件里: routes/web.php
@茄子 谢谢老板
我使用的7.1.12 安装时报错 说要引入 ext-posix 扩展 但是我的这个php版本好像没有这个扩展 应该怎么解决呢
Problem 1 laravel/horizon v1.3.1 requires ext-posix *
:smile:
如果一个项目 我在一个服务器上部署两份 会撺 除了域名 和msyql 数据库不一样 其他都一样的情况下
请问一下大神, 失败或者延时的报警【邮件,sms,Slack】是如何添加的?另外,那个monitoring 监控到了tag可以发通知么?