Laravel中使用独立Redis连接处理队列任务时Horizon不消费如何解决
你只需要在Horizon配置中新增对应连接的消费进程规则即可,无需单独启动新的Horizon实例,具体操作如下:
步骤1:修改Horizon配置文件
打开config/horizon.php,找到environments配置段,在你当前使用的环境(开发环境对应local,生产环境对应production)下新增独立的 supervisor 配置:
'environments' => [ 'local' => [ // 原有主队列的supervisor配置保留不动 'supervisor-1' => [ 'connection' => 'redis', 'queue' => ['default'], 'balance' => 'auto', 'maxProcesses' => 10, 'tries' => 3, ], // 新增针对kingdom_jobs连接的消费配置 'supervisor-kingdom-jobs' => [ 'connection' => 'kingdom_jobs', // 填写你新增的队列连接名称 'queue' => ['default'], // 和你queue.php中kingdom_jobs配置的queue参数保持一致 'balance' => 'auto', 'minProcesses' => 1, 'maxProcesses' => 5, // 可根据任务量级调整最大进程数 'tries' => 3, 'retry_after' => 90, // 和queue.php中kingdom_jobs的retry_after保持一致 ], ], // 生产环境可按照相同格式补充对应配置 ],
步骤2:重启Horizon进程
Horizon启动时会读取静态配置,修改配置后需要重启才能生效:
- 终止当前正在运行的
php artisan horizon进程 - 重新执行
php artisan horizon启动即可
补充说明
你之前运行queue:work没有效果是因为没有指定连接,默认只会消费默认队列连接的任务。如果需要临时用queue:work消费新连接的任务,可以执行:php artisan queue:work kingdom_jobs --tries=3
日常使用Horizon的场景下不需要单独运行该命令,Horizon会根据配置自动管理所有消费进程。
内容的提问来源于stack exchange,提问作者TheWebs
相关产品推荐
相关产品推荐

