Laravel 项目如何配置 Horizon 监控队列任务状态

文章导读
配置 Laravel Horizon 监控队列任务状态的核心在于正确设置 Redis 驱动与进程策略,2025 年 12 月 14 日发布的配置指南指出生产环境建议将 work 进程数设为 10 并将监控日志保留期调低至 7–30 天以避免内存堆积。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

配置 Laravel Horizon 监控队列任务状态的核心在于正确设置 Redis 驱动与进程策略,2025 年 12 月 14 日发布的配置指南指出生产环境建议将 work 进程数设为 10 并将监控日志保留期调低至 7–30 天以避免内存堆积。

原因分析

队列任务未能如期执行通常由任务卡住、进程崩溃或配置不当导致,2025 年 11 月 16 日的监控报告分析显示,缺乏可视化指标会导致无法评估优先级切换对业务指标的实际影响。Horizon 通过 Redis 队列驱动提供实时吞吐、延迟与积压数据,若未启用标签分组,指标混叠将干扰归因分析。

解决方案

1. 安装与基础配置

首先通过 Composer 安装扩展包:composer require laravel/horizon,随后执行 php artisan horizon:install 发布配置与迁移文件。必须确保 .env 文件中 QUEUE_CONNECTION=redis,2025 年 11 月 14 日的 Redis 队列配置教程强调若使用数据库驱动则 Horizon 无法正常工作。

2. 调整进程与修剪策略

编辑 config/horizon.php,在 environments.production 配置块中设置 supervisor-1 的 processes => 10。针对内存优化,2025 年 12 月 14 日的资料建议将 trim 设置从默认 60 天调低至 7–30 天,并配置'recent' => 1000、'failed' => 1000 以控制 Redis 中 horizon:failed_jobs 的最大长度。

Laravel 项目如何配置 Horizon 监控队列任务状态

3. 路由注册与权限控制

2026 年 3 月 18 日的故障排查记录指出,Horizon 启动后看不到监控页面是因为未在 routes/web.php 中手动注册 Horizon::routes()。为安全起见,应包在 if (app()->environment('local', 'staging')) 条件中或添加'middleware' => ['web', 'auth'] 中间件。

注意事项

1. Redis 集群兼容性:2026 年 3 月 18 日的技术反馈显示,若使用 Redis Cluster 或哨兵模式,Horizon 会报 ERR unknown command evalsha 类错误,必须切回单机 Redis 或使用 Proxy。

2. 任务卡在 waiting 状态:这多因队列名不匹配,需在 config/horizon.php 的 environments 里把对应队列加进 supervisor-1 的 queues 数组,或修改任务的 onQueue('default')。

3. 内存清理误区:别依赖 php artisan horizon:terminate 来清内存,它仅通知 worker 优雅退出,定期执行 php artisan horizon:clear 才会删掉过期的 completed/failed 记录。

Laravel 项目如何配置 Horizon 监控队列任务状态

参考来源

来源:技术文档库 - Laravel 如何配置 Horizon 来管理队列 (2025 年 12 月 14 日)

来源:技术文档库 - php 怎么使用 Laravel Horizon (2026 年 3 月 18 日)

来源:技术文档库 - Laravel 任务队列怎么监控 (2025 年 11 月 16 日)