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