【问题标题】:Using a different redis connection to process jobs in Laravel在 Laravel 中使用不同的 redis 连接来处理作业
【发布时间】:2021-11-06 12:28:09
【问题描述】:

我有一个系统,我每小时都会启动大量工作,我希望它们在不同的 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');
        }
    });

问题?

是的,他们被推到了这个新的连接,我看到他们在地平线上 - 其中超过 500 个 - 但他们什么也没做。他们没有得到处理。有没有办法告诉 Horizo​​n 来处理这个额外的连接?

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

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

帮助?

【问题讨论】:

    标签: php laravel redis laravel-queue


    【解决方案1】:

    您可能没有设置 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,
            ],
        ],
    ],
    

    【讨论】:

    • 我正要删除我的问题,因为我想通了哈哈哈,不过还是谢谢你:D
    • 有时,提出问题的行为会使车轮转动,而您会偶然发现答案!希望它在未来对其他人有所帮助。
    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2018-12-04
    相关资源
    最近更新 更多