【发布时间】: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 个 - 但他们什么也没做。他们没有得到处理。有没有办法告诉 Horizon 来处理这个额外的连接?
我目前在开发中使用php artisan horizon 来处理作业 - 还有其他步骤吗?
我从文档中假设,我缺少一些步骤,我认为它与文档中的php artisan queue:work --tries = 3 有关?尝试没有任何效果。这个新连接是否需要另一个 Horizon 实例,或者我是否需要配置 Horizon 以了解该连接?
帮助?
【问题讨论】:
标签: php laravel redis laravel-queue