我已经设置了一个事件ExampleEvent
的批处理消费者,并将其设置为具有ConcurrencyLimit = 16
、MessageLimit = 100
、TimeLimit = 5 sec
和grouping by ExampleEvent.GroupingKey
字段。
这工作正常,并在Rabbit上显示为使用PrefetchCount = 1600
的消费者。问题是,我有一个多pod环境,并且有多个这样的消费者连接到同一个队列。我读到Rabbit使用循环算法分发消息,但是我也读到它会尝试饱和一个消费者,直到达到PrefetchCount
的未确认消息限制。这似乎不是这样的(或者我错过了什么?)).
现在的主要问题是,一些原本可以与消费者1上的其他消息一起进行批处理的消息被发送到消费者2(副本)。根据日志,它们在不到一秒的时间内被拍摄,并且远远没有达到消息限制。
是否有可能以某种方式强制将它们批处理到消费者1?
1条答案
按热度按时间k4emjkb11#
当运行同一服务的多个示例/Pod时,队列上的消息将在所有示例/Pod之间进行负载均衡。在RabbitMQ中,没有办法控制这些消息的方向,使它们只能到达特定的示例。