Laravel Horizon 简介
83

文章翻译&整理自 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

Night gathers, and now my watch begins.

本帖由 Summer 于 1年前 加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 14
overtrue

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

1年前
茄子

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

1年前
overtrue

@茄子 :heart:

1年前
736713830

到时候有中文版的嘛

1年前

php 7.1+

1年前

太棒了!

1年前
森林

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

11个月前
茄子

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

@森林 :smile:

11个月前
森林

@茄子 好的 :smile:

11个月前

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

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

10个月前
茄子

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

10个月前

@茄子 谢谢老板

10个月前

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

1个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!