何时在 Laravel Horizo​​n 中使用多个主管

Posted

技术标签:

【中文标题】何时在 Laravel Horizo​​n 中使用多个主管【英文标题】:When to use multiple supervisors in Laravel Horizon 【发布时间】:2020-05-16 07:38:54 【问题描述】:

在我的config/horizon 我现在有:

'production' => [
            'supervisor-1' => [
                'connection' => 'redis',
                'queue' => ['arbitrage'],
                'balance' => 'auto',
                'processes' => 2,
                'tries' => 1,
            ],
            'supervisor-2' => [
                'connection' => 'redis',
                'queue' => ['trade'],
                'balance' => 'auto',
                'processes' => 4,
                'tries' => 1,
            ],
            'supervisor-3' => [
                'connection' => 'redis',
                'queue' => ['balance', 'trade_meta'],
                'balance' => 'auto',
                'processes' => 5,
                'tries' => 1,
            ],
            'supervisor-4' => [
                'connection' => 'redis',
                'queue' => ['notifications'],
                'balance' => 'auto',
                'processes' => 2,
                'tries' => 1,
            ],
        ],

我这样做是因为我想确保每个队列都有分配的工作人员,不同的队列并行运行并且它们不会相互影响,例如,@ 987654323@ 队列有几十个作业,trade 队列是空的。

我的问题是,如果这有意义,我应该在什么时候使用多个主管?或者:我上面的配置与做的有什么不同:

    'supervisor-1' => [
        'connection' => 'redis',
        'queue' => ['arbitrage', 'trade', 'balance', 'trade_meta', 'notifications'],
        'balance' => 'auto',
        'processes' => 10,
        'tries' => 1,
    ],

考虑到我已经指定了 10 个工作人员,这是否仅在这些队列上同时有 10 个以上的工作组合时才重要?

队列中可能同时有大约 10 到 30 个作业,并且将来还会增加。这就是我以这种方式构建配置的原因,但我不确定定义多个主管的确切含义。

【问题讨论】:

【参考方案1】:

我会在需要确保有工作人员同时分配到多个队列的情况下,或者如果我的某些队列需要不同的连接或平衡方法时这样做。

在您的第一个示例中,如果您只有通知队列中的作业,则其他队列中的所有工作人员都将处于空闲状态。这意味着套利队列中的大量作业不会阻止通知的发送。

在您的后一个示例中,您可以确保所有进程都在使用中,只要有足够的作业来满足它们的整体需求,但是任何一个队列中的大队列都会延迟其后列出的队列中的作业的执行.

【讨论】:

以上是关于何时在 Laravel Horizo​​n 中使用多个主管的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上安装 Laravel Horizo​​n 时出错

Laravel Horizo​​n - Redis - HAProxy - 从服务器读取行时出错

如何编辑 laravel 地平线视图

Laravel 水平管理器在水平:: 终止并运行伪造守护程序后不会重新启动

如何在 Jetpack compose 中检测 Horizo​​ntalPager 中的滑动?

Laravel 5.7 - 队列作业太慢