在阅读了很多有关带有Redis队列的Laravel Horizon的帖子(Like this one from Zechariah Campbell)并尝试对其进行配置和自定义之后,我无法确定是否有可能最大化laravel Horizon运行的进程总数
使用策略“简单”并在每个队列中有一个进程(这是我想要的),当有1000个队列(将导致1000个进程运行)时,可能会导致CPU或内存问题。 (每个队列默认都有自己的进程)
是否有任何方法可以最大化地平线产生的进程总数,而与队列数量无关?因此,有10个进程处理20个队列,当一个队列为空或什至更好时,处理一个队列的一项作业时,工作人员会选择另一个队列吗?
我当前的配置
horizon.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和Horizon 3.0
当前,我使用beantalkd,但是由于缺乏beantalkd的维护和一些讨厌的bug,我想迁移到具有地平线的Redis队列。
更新2019-05-17:
我尝试了配置maxProcesses:
'local' => [
'supervisor-1' => [
'connection' => 'redis',
'balance' => 'simple',
'maxProcesses' => 1,
'processes' => 1,
'tries' => 2,
],
],
答案 0 :(得分:1)
从Horizon 4(及以前的版本)开始,它将始终为每个队列分配至少1个工作线程。没有办法解决。
因此,如果您的minProcess
是1,但是您有3个队列,那么您将至少有3个进程(工作人员)。我猜想minProcess
的设置更像是minProcessPerQueue
的东西。