我已经设置了事件
ExampleEvent
的批量消费者,并将其设置为具有 ConcurrencyLimit = 16
、MessageLimit = 100
、TimeLimit = 5 sec
并按 ExampleEvent.GroupingKey
字段分组。
这工作正常,并以消费者身份显示在 Rabbit 上,并带有
PrefetchCount = 1600
。问题是我有一个多 Pod 环境,并且有多个这样的消费者连接到同一队列。我读到 Rabbit 使用循环算法分发消息,但我也读到它会尝试使一个消费者饱和,直到达到未确认消息的 PrefetchCount
限制。情况似乎并非如此(或者也许我错过了一些东西?)。
现在的主要问题是,一些本来可以与消费者 1 上的其他消息一起批处理的消息被发送到消费者 2(副本)。根据日志,它们的拍摄时间间隔不到一秒,而且远未达到消息限制。
是否有可能以某种方式强制它们在消费者 1 上进行批量处理?
当运行同一服务的多个实例/pod 时,队列上的消息将在所有实例/pod 之间进行负载均衡。 RabbitMQ 中无法控制这些消息的方向,使它们仅发送到特定实例。
也许您可以在消费者配置上使用 SingleActiveConsumer 属性。