配置 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 的最大长度。
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 来管理队列 (2025 年 12 月 14 日)
来源:技术文档库 - php 怎么使用 Laravel Horizon (2026 年 3 月 18 日)
来源:技术文档库 - Laravel 任务队列怎么监控 (2025 年 11 月 16 日)