我有一个 RabbitMQ 设置,其中作业被发送到交换器,交换器将它们传递到队列。消费者依次正确执行队列中的作业。然而,这些工作是漫长的过程(至少几分钟)。为了可扩展性,我需要能够让多个消费者从队列顶部选择一个作业并执行它。
消费者正在一个名为“队列”的 Heroku 测功机上运行。当我缩放测功机时,它似乎为每个测功机创建了额外的消费者(我可以在 RabbitMQ 仪表板上看到这些)。然而,队列中的任务数量没有改变——额外的消费者似乎什么都不做。请查看下图以了解我的设置。
我在这里错过了什么吗?
- 为什么消费者显示为“空闲”?我从我的日志中知道,至少有一个消费者正在积极地完成一项任务。
- 当至少有一个消费者肯定在努力工作时,我的消费者利用率怎么可能是 0%。
- 我怎样才能让其他三个消费者真正从队列中拉出一些工作?
谢谢
编辑:我发现循环调度实际上是有效的,但前提是当消息发送到队列时其他消费者已经在运行。这对我来说似乎是违反直觉的行为。如果我看到一个很大的队列并想添加更多的消费者,那么添加的消费者不会做任何事情,直到更多的项目被添加到队列中。