可视化队列管理工具 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 。

原文发布于微信公众号 - 假装我会写代码(bugszoo)

原文发表时间:2017-07-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hotqin888的专栏

局域网linux系统CentOS上部署engineercms、docker和onlyoffice实现文档协作

等了好久,这次终于下决心在局域网部署了linux系统,并安装docker和load了onlyoffice,利用engineercms进行资料管理和文档协作。

27230
来自专栏帘卷西风的专栏

关于cocos2dx程序的BUG调试解决方案

      今天说一下手机游戏开发的调试问题吧。不得不说的是和PC平台游戏、软件开发相比,手机上开发游戏和软件要困难的多。原因是多方面的,比如说开发环境比较复杂...

10720
来自专栏拂晓风起

浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

27920
来自专栏区块链

XSS攻击——每周小讲堂

我们从一个很蠢的例子开始。 假设网站上有一个很简单的输入框,如果输入123并提交,就会保存并显示在url上。 比如现在填一段JS代码字符串并提交,就会得到一个包...

21160
来自专栏解Bug之路

解Bug之路-记一次JVM堆外内存泄露Bug的查找 顶

JVM的堆外内存泄露的定位一直是个比较棘手的问题。此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤了Bug的源头。笔...

10540
来自专栏落影的专栏

iOS开发笔记(五)

前言 社会的模式很多是重复的,当你做一样事情很擅长时,与之类似的事情也能触类旁通。 正文 Code开发 1、delegate的trick 很多人习惯在调用de...

53740
来自专栏linux驱动个人学习

Android分区

实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区,在所有适配的ROM中这部分是不动,否则会造成通话不稳定

17020
来自专栏武军超python专栏

2018年8月9号飞机大战项目答辩得到的经验和基本的win终端命令

今天遇到的新单词: adapter n适配器 virtual adj 虚拟的 interface n接口 corporation n公司,法人

12730
来自专栏FreeBuf

Nmap 7.50更新:自去年12月来的重大更新

Network Mapper 近日发布了最新更新 Nmap 7.50 ,上一次的更新还需要追溯到2016年12月,而此次的版本上对于对于数百项功能进行了改进。 ...

29740
来自专栏CSDN技术头条

Kubernetes推1.2版本,可管理1000节点,运行3万Pods

赶在Google云端产品用户大会之前,Kubernetes也释出了1.2新版。超过680位开源开发者参与。新版最大特色是扩充能力大幅提高了400%,单个集群可管...

21980

扫码关注云+社区

领取腾讯云代金券