【发布时间】:2019-10-04 00:49:36
【问题描述】:
在阅读了很多关于 Laravel Horizon 和 Redis 队列的帖子 (Like this one from Zechariah Campbell) 并尝试对其进行配置和自定义之后,我无法确定是否可以最大化 laravel Horizon 运行的进程总数。
使用策略“简单”并且每个队列有一个进程(这是我想要的)可能会在拥有 1000 个队列时导致 CPU 或内部内存问题,这将导致 1000 个进程运行? (每个Queue默认都有自己的进程)
有没有什么方法可以最大化 Horizon 产生的进程总数,而不管队列的数量是多少?所以 10 个进程和 20 个队列,当一个队列是空的,或者更好的是处理了一个队列的一个作业时,worker 会选择另一个队列吗?
我目前的配置
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
目前我使用 beanstalkd,但由于缺少 beanstalkd 的维护和一些讨厌的错误,我想迁移到带有 Horizon 的 redis 队列。
2019 年 5 月 17 日更新:
我尝试了配置 maxProcesses:
'local' => [
'supervisor-1' => [
'connection' => 'redis',
'balance' => 'simple',
'maxProcesses' => 1,
'processes' => 1,
'tries' => 2,
],
],
【问题讨论】:
-
有maxProcesses和minProcesses检查divinglaravel.com/introduction-to-how-laravel-horizon-workspost
-
查看更新的答案,由于可读性而未发表评论
-
我认为总体而言,您要寻找的是 balance=> "auto"
-
不,我不希望两个或多个进程处理一个队列,这就是此自动平衡选项的作用。我刚刚尝试过,但这也创建了三个进程,每个队列一个。我想要 10 个进程来处理例如 100 个队列,而没有两个工作人员处理一个队列。
-
reddit.com/r/laravel/comments/43ya3c/… 我认为这可能会有所帮助
标签: php laravel redis queue laravel-horizon