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

Laravel Horizon未自动处理notifications队列问题求助

解决Laravel Horizon中notifications队列无法自动处理的问题

别急,Horizon确实应该自动处理你配置的所有队列任务,出现这个情况大概率是配置或者服务运行的环节出了问题,咱们一步步排查:

  • 检查Horizon的Supervisor配置
    打开config/horizon.php,找到对应环境(比如local或production)的supervisor配置块。你需要确保其中的queue数组包含notifications,比如:

    'local' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default', 'notifications'], // 必须包含notifications队列
            'balance' => 'auto',
            'processes' => 3,
            'tries' => 3,
        ],
    ],
    

    如果这里只写了default,那Horizon的worker只会盯着default队列跑,完全不会处理notifications的任务。修改后记得重启Horizon生效。

  • 确认Horizon服务是否持续运行
    如果你只是在终端手动执行php artisan horizon,那关闭终端后Horizon就停了,自然不会自动处理任务。生产环境一定要用进程管理器(比如Supervisor、Systemd)来托管Horizon进程,保证它一直运行。
    你可以先执行php artisan horizon:status看看Horizon是不是处于运行状态,如果显示Horizon is not running.,那就手动启动它:php artisan horizon,然后测试任务是否自动处理。

  • 检查Horizon面板的队列状态
    访问Horizon的Web面板(默认路径是/horizon),找到notifications队列对应的worker组,看看是不是被手动暂停了。有时候可能误操作在面板里暂停了队列,只需要点击"Resume"按钮恢复即可。面板里还能看到队列的任务积压情况、worker的运行状态,能帮你快速定位问题。

  • 验证Redis连接和任务推送
    确保你的队列和Horizon用的是同一个Redis实例(检查config/database.php里的Redis配置),避免任务推送到了A Redis,而Horizon盯着B Redis。另外可以用Redis客户端确认任务是否真的进入了notifications队列:

    redis-cli
    LRANGE queues:notifications 0 -1
    

    如果能看到任务数据,说明推送没问题,问题出在Horizon的处理环节。

  • 重启Horizon服务
    有时候配置修改后需要重启Horizon才能生效,执行php artisan horizon:terminate,然后重新启动Horizon,让它加载新的配置。

按照上面的步骤排查,基本就能解决notifications队列无法自动处理的问题了。

内容的提问来源于stack exchange,提问作者Wonka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:22:26