2

在阅读了很多关于 Laravel Horizo​​n 和 Redis 队列的帖子(比如来自 Zechariah Campbell 的这篇文章)并尝试配置和自定义它之后,我无法确定是否可以最大化 laravel Horizo​​n 运行的进程总数。

使用“简单”策略并且每个队列有一个进程(这是我想要的)可能会在拥有 1000 个队列而导致 1000 个进程运行时导致 cpu 或内部内存问题?(默认情况下,每个队列都有自己的进程)

无论队列数量如何,有什么方法可以最大化 Horizo​​n 产生的进程总数?所以 10 个进程和 20 个队列,当一个队列是空的,或者甚至更好地处理了一个队列的一项工作时,工作人员会选择另一个队列吗?

我目前的配置

地平线.php

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

队列.php

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

laravel 5.8 和地平线 3.0

目前我使用 beanstalkd,但由于缺少 beanstalkd 的维护和一些讨厌的错误,我想迁移到带有 Horizo​​n 的 redis 队列。

更新 2019-05-17:

我尝试了配置 maxProcesses:

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

但即便如此,也会创建三个进程,每个队列一个。 在此处输入图像描述

4

1 回答 1

1

从 Horizo​​n 4(和之前的版本)开始,它总是会为每个队列分配至少 1 个工作线程。没有办法解决它。因此,如果您minProcess是 1 但您有 3 个队列,那么您将至少有 3 个进程(工作人员)。我想minProcess设置更多的是一minProcessPerQueue件事。

于 2020-05-05T22:20:57.787 回答