在阅读了很多有关带有Redis队列的Laravel Horizon的帖子(Like this one from Zechariah Campbell)并尝试对其进行配置和自定义之后,我无法确定是否有可能最大化laravel Horizon运行的进程总数。
使用策略“简单”并在每个队列中有一个进程(这是我想要的),当有1000个队列时,可能会导致cpu或内部内存问题,这将导致1000个进程运行? (默认情况下,每个队列都有自己的进程)
有什么方法可以最大化地平线产生的进程总数,而与队列数量无关?因此,有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,
],
],
但是即使那样,也会创建三个进程,每个队列一个。
最佳答案
从Horizon 4(及以前的版本)开始,它将始终为每个队列分配至少1个工作线程。没有办法解决。
因此,如果您的minProcess
为1,但是您有3个队列,那么您将至少有3个进程(工作人员)。我猜minProcess
设置更像是minProcessPerQueue
。
关于php - Laravel Horizon限制了总流程数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56173680/