在我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,
],
],
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我想确保每个队列都有分配的工作人员,不同的队列并行运行并且它们不会相互影响,例如,即使notifications队列有几十个作业,trade队列为空。
我的问题是,如果这有意义,我什么时候应该使用多个主管?或者:我上面的配置与做的有什么不同:
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['arbitrage', 'trade', 'balance', 'trade_meta', 'notifications'],
'balance' => 'auto',
'processes' => 10,
'tries' => 1,
],
Run Code Online (Sandbox Code Playgroud)
考虑到我指定了 10 个工作人员,这仅在这些队列中同时有 10 个以上的工作合并时才重要吗?
队列中可能同时有大约 10 到 30 个作业,而且将来可能会增加。这就是我以这种方式构建配置的原因,但我不确定定义多个主管的确切含义。
当我需要确保有工作人员同时分配到多个队列,或者如果我需要为某些队列使用不同的连接或平衡方法时,我会这样做。
在第一个示例中,如果通知队列中只有作业,则其他队列中的所有工作人员都将处于空闲状态。这意味着套利队列中的大量作业不会阻碍通知的发送。
在后一个示例中,您可以确保只要有足够的作业来满足所有进程的总体需求,所有进程都会被使用,但是任一队列中的大队列都会延迟其后列出的队列中作业的执行。