
laravel horizon 并不取代标准队列系统,而是构建在其之上;你仍需保留 `config/queue.php` 配置,但可停用 `queue:work` 的 supervisor 进程,改用 horizon 专属的 `horizon:work` 进程管理。
Laravel Horizon 是 Laravel 官方提供的、面向 Redis 驱动队列的增强型监控与管理解决方案,它不是独立队列系统,而是一个运行在 Laravel 原生队列之上的“智能层”。这意味着:
✅ config/queue.php 必须保留且正确配置
Horizon 依赖 Laravel 的底层队列抽象(Illuminate\Queue\QueueManager),其所有功能(如任务分发、延迟队列、失败重试)均由标准队列组件实现。你仍需在 queue.php 中指定 'default' => 'redis',并确保 redis 连接配置有效。Horizon 本身不接管队列驱动逻辑,仅通过监听 Redis 的特定频道(如 queues:default)来采集指标和控制工作进程。
✅ queue:work 进程应被完全替换为 horizon:work
在生产环境部署时,必须移除原有针对 php artisan queue:work 的 Supervisor 配置(例如 laravel-worker.conf 中的 command=php /var/www/artisan queue:work ...),转而使用 Horizon 提供的专用命令:
# 示例:Supervisor 配置(/etc/supervisor/conf.d/horizon.conf) [program:horizon] process_name=%(program_name)s command=php /var/www/artisan horizon autostart=true autorestart=true user=www-data redirect_stderr=true stdout_logfile=/var/www/storage/logs/horizon.log
执行 php artisan horizon 后,Horizon 会自动启动一组基于 horizon:work 的守护进程(Worker Processes),这些进程与 queue:work 功能等价——均从 Redis 拉取任务并执行,但额外支持动态缩放、优先级调度、实时监控和内存/超时保护等高级特性。
⚠️ 注意事项:
- Horizon 强制要求使用 Redis 作为队列驱动(不支持 database、sync 或 sqs 等其他驱动);
- 若项目中同时存在非 Redis 队列(如邮件通知走 sync),它们不受 Horizon 影响,也无需配置 Horizon;
- 修改 horizon.php 配置(如 environments.production.supervisor-1.processes)后,需执行 php artisan horizon:terminate 以平滑重启进程;
- 开发环境可继续使用 php artisan queue:work --once 进行调试,但生产环境务必统一由 Horizon 管理。
简言之:配置留队列,进程换 Horizon——这是 Laravel 队列演进中的典型“增强而非替代”设计哲学。










