Laravel Horizon 简介

文章翻译&整理自 Taylor 的 博客文章

Taylor 在今天发布了一个新工具:Laravel Horizon ,它为 Laravel Redis 队列提供了一个漂亮的仪表板和代码驱动的配置系统。此工具完全开源,你可以在 GitHub 上找到它。
此工具需要尚未正式发版的 Laravel 5.5 ,并且其本身也还处于 Beta 状态。

仪表板

file
Horizon 的仪表板是一个 Vue 单页应用,可以使用命令 composer require laravel/horizon 直接安装进已有的应用中。它提供队列工作负载、最近作业、失败作业、作业重试、吞吐量和运行时指标、进程计数的实时显示。
仪表板的身份验证,可以通过 Horizon::auth 注册回调函数来完全控制:

Horizon::auth(function ($request) {
    // return true / false;
});

配置

与 Laravel 的调度程序类似,你所有队列 worker 的配置都在你的代码之中:
file
在代码库中进行此配置意味着这些都将在源代码版本控制之中,使你的团队可以轻松协作。在 config/horizon.php 文件中,我可以配置我想创建多少个进程、队列超时时间,和所有通常我需要传递给 queue:work 命令的设置。
然后,只需一个简单的命令 php artisan horizon 即可启动所有的队列 worker 。不需要其他的命令选项,此命令会读取 Horizon 配置并提供所需要的工作进程。
Horizon 被安装并部署到生产环境中之后,你可以通过修改配置文件并重新部署,来修改 worker 配置。

失败的任务

Horizon 提供了一个清晰、详细的界面来查看和重试失败任务(是的,我们都有失败的任务)。你可以查看任务的异常堆栈、标签、最近重试的任务。将最近重试的任务直接显示在失败的任务详情页上,真的非常棒。因为重试与原始失败的任务相关联,所以你不再需要在终端中盲目的反复尝试 queue:retry 来重启任务,以确定任务成功还是再次失败:
file

标签监控

Horizon 允许你为任务分配标签,包括:邮件、广播、通知和队列监控器。事实上,Horizon 可以根据附加到任务上的 Eloquent 模型,智能地自动分配绝大多数标签。
通过标签,你可以轻松的搜索到你的任务:回顾指定客户的所有任务、或者你应用中其他实体的所有任务。此功能可以让你关注高价值客户:
file

负载平衡

file
Horizon 会根据队列的工作负载自动平衡队列的工作进程。例如,当你的“默认”队列为空,但是“通知”队列被任务填满时。Horizon 可以自动的将备用 worker 分配到“通知“队列中,以帮助快速处理这些任务。
等到队列进度被赶上时,Horizon 会确保所有的进程被公平的重新分配。

性能度量

file
Horizon 提供吞吐量和平均运行时间的图表,允许你查看单个任务或者整个队列的吞吐量和运行时趋势。这些度量快照是使用命令 horizon:snapshot 捕获的,它可以使用 Laravel 内置调度每分钟运行一次,方便你在部署之后快速查找性能下降的原因。

通知

file
当你的队列过满时,Horizon 可以向你发送 SMS 和 Slack 通知。你可以配置等待时间阈值,以确定何时发送通知。这意味着你总是可以清楚的知道,你的队列何时需要更多的 worker 。收到通知之后,Horizon 的代码驱动配置让你可以快速更改配置以添加更多的 worker。

其他

Taylor 在最后感谢了 Horizon 的贡献者: Mohamed SaidDavid HemphillSteve Schoger

本作品采用《CC 协议》,转载必须注明作者和本文链接
Night gathers, and now my watch begins.
本帖由 Summer 于 6年前 加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 17

@茄子 我可以转到我的公众号不

6年前 评论

@overtrue 当然可以,超哥随便转

6年前 评论

到时候有中文版的嘛

6年前 评论

太棒了!

6年前 评论
森林

这个好像需要php 的 pcntl 扩展,但是win下面好像没有,是不是代表着laravel5.5不能在win下面做开发了。

6年前 评论

尽量使用「官方推荐的开发环境」

@森林 :smile:

6年前 评论
森林

@茄子 好的 :smile:

6年前 评论

问下 这个应该写到 哪个文件里啊

Horizon::auth(function ($request) {
// return true / false;
});

6年前 评论

@chiefyang 在路由定义文件里: routes/web.php

6年前 评论

我使用的7.1.12 安装时报错 说要引入 ext-posix 扩展 但是我的这个php版本好像没有这个扩展 应该怎么解决呢
Problem 1 laravel/horizon v1.3.1 requires ext-posix *

5年前 评论
KunHong

如果一个项目 我在一个服务器上部署两份 会撺 除了域名 和msyql 数据库不一样 其他都一样的情况下

4年前 评论

请问一下大神, 失败或者延时的报警【邮件,sms,Slack】是如何添加的?另外,那个monitoring 监控到了tag可以发通知么?

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!