Laravel Horizo​​n限制了总流程数量

时间:2019-05-16 17:23:09

标签: php laravel redis queue laravel-horizon

在阅读了很多有关带有Redis队列的Laravel Horizo​​n的帖子(Like this one from Zechariah Campbell)并尝试对其进行配置和自定义之后,我无法确定是否有可能最大化laravel Horizo​​n运行的进程总数

使用策略“简单”并在每个队列中有一个进程(这是我想要的),当有1000个队列(将导致1000个进程运行)时,可能会导致CPU或内存问题。 (每个队列默认都有自己的进程)

是否有任何方法可以最大化地平线产生的进程总数,而与队列数量无关?因此,有10个进程处理20个队列,当一个队列为空或什至更好时,处理一个队列的一项作业时,工作人员会选择另一个队列吗?

我当前的配置

horizo​​n.php

'local' => [
            'supervisor-1' => [
                'connection' => 'redis',
                'balance'    => 'simple',
                'processes'  => 1,
                'tries'      => 2,
            ],
        ],

queue.php

'redis' => [
            'driver'      => 'redis',
            'connection'  => 'queue',
            'queue'       => "1000,2000,3000",
            'retry_after' => 90,
            'block_for'   => null,
        ],

laravel 5.8和Horizo​​n 3.0

当前,我使用beantalkd,但是由于缺乏beantalkd的维护和一些讨厌的bug,我想迁移到具有地平线的Redis队列。

更新2019-05-17:

我尝试了配置maxProcesses:

'local' => [
            'supervisor-1' => [
                'connection' => 'redis',
                'balance'    => 'simple',
                'maxProcesses' => 1,
                'processes'  => 1,
                'tries'      => 2,
            ],
        ],

但是即使那样,也会创建三个进程,每个队列一个。 enter image description here

1 个答案:

答案 0 :(得分:1)

从Horizo​​n 4(及以前的版本)开始,它将始终为每个队列分配至少1个工作线程。没有办法解决。 因此,如果您的minProcess是1,但是您有3个队列,那么您将至少有3个进程(工作人员)。我猜想minProcess的设置更像是minProcessPerQueue的东西。