在我的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,
],
],我之所以这样做,是因为我想确保这些队列中的每个队列都获得了分配给它们的工作进程,不同的队列并行运行,并且它们不会相互影响,即使例如,notifications队列有几十个作业,trade队列是空的。
我的问题是,这是否有意义,我到底应该在什么时候使用多个supervisors?或者:我的上述配置与执行以下操作有何不同:
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['arbitrage', 'trade', 'balance', 'trade_meta', 'notifications'],
'balance' => 'auto',
'processes' => 10,
'tries' => 1,
],如果我指定了10个worker,那么这是否仅在这些队列上同时存在超过10个作业的情况下才有关系呢?
队列中可能同时有大约10到30个作业,而且这个数量在未来可能会增加。这就是为什么我以这种方式构建我的配置,但我不确定定义多个supervisors到底意味着什么。
发布于 2021-11-16 07:30:33
我会在需要确保同时将工作进程分配到多个队列的情况下,或者如果我需要为某些队列使用不同的连接或平衡方法的情况下这样做。
在第一个示例中,如果通知队列中只有作业,则其他队列上的所有工作进程都将处于空闲状态。这意味着套利队列中的大量作业不会阻碍通知的发送。
在后一个示例中,您将确保只要有足够的作业提供给所有进程,所有进程都将处于使用状态,但是,任何一个队列中的大队列都会延迟它后面列出的队列中作业的执行。
https://stackoverflow.com/questions/59990260
复制相似问题