You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 7运行时切换队列连接失效求助(Horizon环境)

问题分析

你遇到的核心问题是:Horizon仅配置了监听redis队列连接的Supervisor,即便你将任务指定到long_run连接,最终还是由redis连接的Supervisor处理任务——而该Supervisor启动时加载的是redis连接的retry_after=90配置,导致任务在90秒后超时。

解决方案

1. 给long_run连接添加专属Horizon Supervisor

打开config/horizon.php,在对应环境(local/production)的environments数组中,新增针对long_run连接的Supervisor配置:

'environments' => [
    'production' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default'],
            'balance' => 'simple',
            'processes' => 10,
            'tries' => 1,
        ],
        // 新增long_run连接的Supervisor
        'supervisor-2' => [
            'connection' => 'long_run',
            'queue' => ['default'],
            'balance' => 'simple',
            'processes' => 2, // 根据业务需求调整进程数
            'tries' => 1,
        ],
    ],

    'local' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default'],
            'balance' => 'simple',
            'processes' => 3,
            'tries' => 1,
        ],
        // 新增long_run连接的Supervisor
        'supervisor-2' => [
            'connection' => 'long_run',
            'queue' => ['default'],
            'balance' => 'simple',
            'processes' => 1,
            'tries' => 1,
        ],
    ],
],

2. (可选但推荐)给long_run配置独立队列

为避免不同连接的任务混在同一队列被错误处理,建议修改config/queue.php,给long_run分配专属队列:

'redis' => [
    'driver' => 'redis',
    'connection' => 'default',
    'queue' => 'default',
    'retry_after' => 90,
],
'long_run' => [
    'driver' => 'redis',
    'connection' => 'default',
    'queue' => 'long_queue', // 设置独立队列名称
    'retry_after' => 3600,
],

同时更新Horizon中supervisor-2的queue配置为['long_queue'],并调整任务分发代码:

dispatch(new doSomethingJob($path, auth()->user()))->onConnection('long_run')->onQueue('long_queue');

3. 生效配置并重启Horizon

执行以下命令刷新配置缓存,重启Horizon使新配置生效:

php artisan config:cache
php artisan horizon:terminate
# 等待几秒后重新启动Horizon
php artisan horizon

完成以上步骤后,long_run连接的任务会被专属Supervisor处理,将使用3600秒的超时配置,不会再出现自动切换回redis连接的问题。

内容的提问来源于stack exchange,提问作者john555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:18:37