使用不同的 redis 连接处理 Laravel 中的作业

Using a different redis connection to process jobs in Laravel

我有一个系统,每小时都会启动大量作业,我希望它们在不同的 redis 连接上处理,与主要的作业分开,以便它们弹出不要干扰其他被推入队列的作业(即延迟它们)。

所以我做了以下操作,我创建了一个新的 redis 连接:

    'kingdom_jobs' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_CACHE_DB', 2),
    ],

然后创建了一个新的队列连接:

    'kingdom_jobs' => [
        'driver' => 'redis',
        'connection' => 'kingdom_jobs', // Uses the new connection
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],

然后在启动所有这些作业的循环中:

    Kingdom::chunkById(250, function($kingdoms) use ($service) {
        foreach ($kingdoms as $kingdom) {
            UpdateKingdomJob::dispatch($kingdom)->onConnection('kingdom_jobs');
        }
    });

问题?

是的,他们被推送到这个新连接,我在 horizon 中看到他们 - 超过 500 个 - 但他们什么都不做。他们没有得到处理。有没有办法告诉 horizon 处理这个额外的连接?

我目前在开发中使用 php artisan horizon 来处理作业 - 还有其他步骤吗?

我从文档中假设,我缺少一些步骤,我假设它与文档中的 php artisan queue:work --tries = 3 有关?尝试这样做没有任何效果。我是否需要另一个 horizon 实例用于此新连接,或者我是否配置 horizon 以了解此连接?

求助?

您可能没有设置 Horizo​​n 主管来监视您的新队列。

查看 Horizo​​n 配置:

'environments' => [
    'production' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default'],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 10,
            'balanceMaxShift' => 1,
            'balanceCooldown' => 3,
            'tries' => 3,
        ],
    ],
],

看来我们可以在生产环境中添加另一个主管(如果需要,还可以添加其他主管):

'environments' => [
    'production' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default'],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 10,
            'balanceMaxShift' => 1,
            'balanceCooldown' => 3,
            'tries' => 3,
        ],
        'supervisor-2' => [
            'connection' => 'kingdom_jobs',
            'queue' => ['default'],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 10,
            'balanceMaxShift' => 1,
            'balanceCooldown' => 3,
            'tries' => 3,
        ],
    ],
],