Laravel Horizon 与标准队列的关系详解:配置、替代与共存

Laravel Horizon 与标准队列的关系详解:配置、替代与共存

laravel horizon 并不取代标准队列系统,而是构建在其之上;你仍需保留 `config/queue.php` 配置,但可移除 `queue:work` 的 supervisor 进程配置,改用 `horizon:work` 统一管理。

Laravel Horizon 是 Laravel 官方推出的高性能队列监控与管理解决方案,它不是独立的队列驱动,而是一个基于原生队列系统的增强层。这意味着:

  • ✅ 你必须继续使用 config/queue.php —— Horizon 依赖其中定义的队列连接(尤其是 redis 驱动),并在此基础上添加仪表盘、自动缩放、标签分组、延迟/重试策略等高级功能;
  • ❌ 不可删除 QUEUE_CONNECTION=redis 等核心配置,否则 Horizon 将无法启动或报错(如 Driver [redis] not supported);
  • ⚙️ Horizon 启动的 horizon:work 命令本质是 queue:work 的封装扩展版,它内部仍调用相同的 Illuminate/Queue/Worker,但增加了心跳上报、进程健康检查、动态平衡等能力。

在生产环境部署时,Supervisor 配置需做关键调整:

; ✅ 正确:仅保留 Horizon 的 Supervisor 配置(示例)
[program:laravel-horizon]
process_name=%(program_name)s
command=php /var/www/myapp/artisan horizon
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/myapp/storage/logs/horizon.log
; ❌ 移除:不再需要单独的 queue:work 进程(避免重复消费)
; [program:laravel-queue-worker]
; command=php /var/www/myapp/artisan queue:work --sleep=3 --tries=3
; ...

⚠️ 注意事项:

琅琅配音

琅琅配音

全能AI配音神器

下载

  • Horizon 要求 Redis 作为唯一支持的队列驱动(不兼容 database、sync 或 beanstalkd);
  • 若项目中混用多种队列连接(如 redis 用于任务、database 用于日志),Horizon 仅监控 redis 连接,其他连接仍需手动维护;
  • Horizon 进程本身即为“工作进程管理者”,它会根据配置自动派生多个 horizon:work 子进程(而非传统 queue:work –daemon),因此无需额外守护 queue:work;
  • 升级 Horizon 后务必运行 php artisan horizon:publish 同步最新配置,并重启 Horizon 进程(php artisan horizon:terminate)。

总结来说:Horizon = Laravel 队列 + Redis + 实时监控 + 智能调度。它强化而非替代底层队列机制,合理配置 queue.php 并统一使用 horizon:work,才能发挥其最大价值。

https://www.php.cn/faq/1971884.html

发表回复

Your email address will not be published. Required fields are marked *