【问题标题】:ActiveMQ message ordering with Network of brokers使用代理网络的 ActiveMQ 消息排序
【发布时间】:2019-10-24 03:26:33
【问题描述】:

我已经使用网络连接器配置了两个代理 A 和 B。 如果我使用独占消费者(单一消费者)或消息组(JMXgroupID),消息顺序是否保留?

network of broker documentation我发现了这个:

代理网络不会保留总消息排序。 Total ordering 适用于单个消费者,但 networkBridge 引入了第二个消费者。此外,网桥消费者通过 producer.send(..) 转发消息,因此它们从转发代理的队列头部到目标队列的尾部。如果单个消费者在网络代理之间移动,如果所有消息始终跟随消费者,则可能会保留总顺序,但对于大量消息积压,这可能难以保证。

在单个代理中,可以通过独占消费者进行消息排序。如果我使用具有独家消费者的经纪人网络会发生什么?

【问题讨论】:

  • 我的回答是否解决了您的问题?如果是这样,请将其标记为正确,以帮助将来有相同问题的其他用户。如果不是,请详细说明原因。谢谢!

标签: activemq


【解决方案1】:

代理网络中的总消息排序不起作用 - 即使您有一个或多个使用“独占消费者”功能的消费者。

考虑以下场景,网络中有 2 个代理(我们称之为 broker-Abroker-B)、1 个消费者(consumer-A)、2 个生产者(producer-Aproducer-B)和 1 个队列( queue-A)。

  1. producer-A 连接到 broker-A,向 queue-A 发送消息 (message-1),然后断开连接。
  2. producer-B 连接到 broker-B,向 queue-A 发送消息 (message-2),然后断开连接。
  3. producer-A 重新连接到 broker-A,向 queue-A 发送消息 (message-3),然后断开连接。
  4. consumer-A 连接到broker-A 并接收来自queue-A 的消息。即使消息是按message-1message-2message-3 的顺序发送的,消费者实际上也会按照message-1message-3message-2 的顺序接收消息,因为发送了message-1message-3broker-Amessage-2 被发送到 broker-B 并且必须根据消费者需求通过经纪人网络转移到 broker-A

值得注意的是,代理网络的主要目标之一是可扩展性。然而,为了保证消息被消费,消息必须串行被消费,这会大大降低性能,并且几乎肯定会抵消代理网络提供的任何可扩展性收益。总消息排序和代理网络是根本对立的想法。如果您真的想要完整的消息排序,则不应使用代理网络。

【讨论】:

  • 消息将在网络连接器中按需移动如果我只有一个消费者(一次它将连接到一个代理)出现在队列中,即使我正在使用代理网络。这种方法是否提供消息排序。提前谢谢..!
  • 我更新了我的答案以更详细地解决您的问题。我希望这会有所帮助。
  • 请注意,消息中间件的最佳实践是使用幂等处理,以便最小化或消除消息排序需求。例如,可以使用在发送的每条消息中放置一个序列号来实现此目的。此外,camel 的聚合器可以提供帮助。
猜你喜欢
  • 2013-03-10
  • 1970-01-01
  • 2013-07-01
  • 2012-01-04
  • 2010-11-30
  • 2018-03-01
  • 2012-02-17
  • 1970-01-01
  • 2019-02-14
相关资源
最近更新 更多