You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Horizon不显示laravel-echo队列消息如何排查

Laravel Echo 消息队列在Horizon面板无记录排查方向
  • 首先核对广播任务的队列连接、队列名是否在Horizon监控范围内
    打开config/broadcasting.php查看Redis广播驱动的配置项,重点看queue.connection和queue.queue两个参数:Laravel广播事件默认不会走全局队列配置,而是优先用广播配置里指定的连接和队列名,很多人会单独给广播分配独立队列(比如broadcasts队列),但config/horizon.php对应环境下supervisor进程配置的queue监听列表没加这个队列名,Horizon只会采集自己监听范围内的队列任务,不在列表里的任务不会在面板展示。
  • 确认广播事件是否真的走了异步队列分发
    检查你所有触发Socket推送的事件类:如果事件实现的是ShouldBroadcastNow接口,这类广播是同步执行的,不会生成队列任务,自然不会在Horizon留痕;只有实现ShouldBroadcast接口的事件才会走队列异步分发。另外也要检查事件里有没有重写broadcastQueue方法、或者自定义了队列分发逻辑,绕过了默认的任务上报流程。
  • 核对Redis连接、库号配置是否一致
    打开config/database.php查看Redis连接配置,确认Horizon使用的Redis连接、库号、key前缀和广播队列使用的完全一致:比如Horizon连的是redis连接的db 1,但广播消息写到了db 0,或者两边配置的Redis key前缀不一样,Horizon根本扫不到对应队列的key,自然不会展示记录。这里要注意区分Redis原生Pub/Sub消息和队列任务:Echo的部分连接信令是直接走Pub/Sub不进队列的,但你确认业务消息已经进入队列流转的话,重点查连接配置一致性即可。
  • 检查Horizon的任务保留与过滤配置
    查看config/horizon.php里的trim配置项,要是已完成任务的保留时间设得过短(比如设成1分钟),广播任务本身执行速度极快,等你打开面板的时候任务记录已经被自动清理了,就会看不到。另外也要检查有没有在HorizonServiceProvider里写过任务过滤回调,把广播类任务排除出了面板展示范围。
  • 确认队列Worker的启动方式
    如果你处理广播队列的Worker是手动通过php artisan queue:work命令启动的,不是通过php artisan horizon启动的主进程托管的,那这些Worker处理的任务不会向Horizon上报执行记录,面板自然看不到。只有Horizon主进程拉起的Worker处理的任务才会被面板采集统计。

快速验证技巧:找一个触发Socket推送的业务事件,手动在类里加上public $connection = 'redis'; public $queue = 'default';,强制它走你之前测试TestJob用的连接和队列,触发一次事件后刷新Horizon面板,如果能看到记录,就可以确定是之前的队列/连接配置不匹配导致的问题。

内容的提问来源于stack exchange,提问作者Винсентэ Пуххини

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:36:18