代码之家  ›  专栏  ›  技术社区  ›  xLokos

RabbitMQ MassTransit批处理竞争消费者

  •  0
  • xLokos  · 技术社区  · 3 年前

    我已经设置了一个活动的批处理消费者 ExampleEvent 并将其设置为 ConcurrencyLimit = 16 , MessageLimit = 100 , TimeLimit = 5 sec 和分组依据 ExampleEvent.GroupingKey 领域

    这很好,在Rabbit上显示为消费者 PrefetchCount = 1600 。问题是,我有一个多吊舱环境,并且有多个像这样的消费者连接到同一队列。我读到Rabbit使用循环算法分发消息,但我也读到它将试图使一个消费者饱和,直到 PrefetchCount 已达到未确认消息的限制。事实似乎并非如此(或者我错过了什么?)。

    现在的主要问题是,一些本可以与使用者1上的其他消息进行批处理的消息正在发送到使用者2(副本)。根据日志,它们在不到一秒钟的时间内被拿走,而且远未达到消息限制。

    是否可以以某种方式强制在消费者1上进行批量处理?

    1 回复  |  直到 3 年前
        1
  •  0
  •   Chris Patterson    3 年前

    当运行同一服务的多个实例/pod时,队列上的消息将在所有实例/pod之间实现负载平衡。无法在RabbitMQ中控制这些消息的方向,从而使它们只能到达特定的实例。