利用代理网络进行ActiveMQ消息排序

利用代理网络进行ActiveMQ消息排序,activemq,Activemq,我已经使用networkconnectors配置了两个代理A和B。 如果使用独占使用者(单个使用者)或消息组(JMXgroupID),是否保留消息顺序 在这本书中,我发现: 代理网络不保留总消息顺序。总订购只适用于一个消费者,但networkBridge引入了第二个消费者。此外,网桥消费者通过producer.send(..)转发消息,因此他们从转发代理上的队列头转到目标上的队列尾。如果单个消费者在网络代理之间移动,则如果所有消息始终跟随消费者,则可能会保留总订单,但这在大量消息积压的情况下很难

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

在这本书中,我发现:

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


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

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

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

  • producer-A
    连接到
    broker-A
    ,向
    queue-A
    发送消息(
    message-1
    ),然后断开连接
  • producer-B
    连接到
    broker-B
    ,向
    queue-a
    发送消息(
    message-2
    ),然后断开连接
  • producer-A
    重新连接到
    broker-A
    ,向
    queue-A
    发送消息(
    message-3
    ),然后断开连接
  • consumer-A
    连接到
    broker-A
    并从
    queue-A
    接收消息。即使消息是按顺序发送的,
    message-1
    message-2
    message-3
    ,消费者也会按顺序接收消息,
    message-2
    ,因为
    message-1
    message-3
    被发送到
    broker-A
    message-2
    被发送到
    broker-B
    ,必须根据消费者需求通过经纪人网络移动到
    broker-A

  • 值得注意的是,代理网络的主要目标之一是可伸缩性。然而,为了保证消息的消费顺序,消息必须连续消费,这会大大降低性能,几乎肯定会抵消代理网络提供的任何可伸缩性收益。总体消息排序和代理网络从根本上说是对立的观点。如果你真的想要全部消息排序,你不应该使用代理网络。

    在代理网络中全部消息排序不起作用-即使你有一个或多个消费者使用“独家消费者”功能

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

  • producer-A
    连接到
    broker-A
    ,向
    queue-A
    发送消息(
    message-1
    ),然后断开连接
  • producer-B
    连接到
    broker-B
    ,向
    queue-a
    发送消息(
    message-2
    ),然后断开连接
  • producer-A
    重新连接到
    broker-A
    ,向
    queue-A
    发送消息(
    message-3
    ),然后断开连接
  • consumer-A
    连接到
    broker-A
    并从
    queue-A
    接收消息。即使消息是按顺序发送的,
    message-1
    message-2
    message-3
    ,消费者也会按顺序接收消息,
    message-2
    ,因为
    message-1
    message-3
    被发送到
    broker-A
    message-2
    被发送到
    broker-B
    ,必须根据消费者需求通过经纪人网络移动到
    broker-A

  • 值得注意的是,代理网络的主要目标之一是可伸缩性。然而,为了保证消息的消费顺序,消息必须连续消费,这会大大降低性能,几乎肯定会抵消代理网络提供的任何可伸缩性收益。总体消息排序和代理网络从根本上说是对立的观点。如果您真的想要全部邮件排序,则不应使用代理网络。

    即使我使用代理网络,如果队列中只有一个消费者(一次它将连接到一个代理),则邮件将在网络连接器中按需移动。这种方法是否提供消息排序。提前谢谢。。!我更新了我的答案,更详细地回答了你的问题。我希望这会有所帮助。请注意,消息传递中间件的最佳实践是使用幂等处理,以便最小化或消除消息排序需求。例如,在发送的每条消息中添加一个序列号可用于实现此目的。此外,camel的聚合器也可以提供帮助。消息将在网络连接器中按需移动,如果队列中只有一个消费者(一次它将连接到一个代理),即使我使用的是代理网络。这种方法是否提供消息排序。提前谢谢。。!我更新了我的答案,更详细地回答了你的问题。我希望这能有所帮助。请注意,消息传递中间件的最佳实践是使用幂等p