如果我异步发送消息,Azure Service Bus队列中的消息顺序是什么?

时间:2015-01-24 11:02:18

标签: azure asynchronous servicebus azureservicebus azure-servicebus-queues

如果使用SendAsync(...)将消息发送到Azure Service总线主题/队列,是否保证消息排序?

例如,如果我有一个应用程序,其中一个线程使用SendAsync发送大量消息,那么调用方法SendAsync的顺序是否会被维护? Service Bus客户端库是否足够智能,以便知道虽然消息将以异步方式发送,但它们在主题中的添加顺序是否始终保持不变?

2 个答案:

答案 0 :(得分:1)

异步与否,试图从消息总线中提取排序保证是一个滑坡。你受到网络的支配,这总是不可靠的。

请注意,默认情况下,Azure服务总线不提供任何排序​​保证。您可以通过消息会话引入一些先进先出的订购,但这不足以保证您的消息将被处理的顺序。这里有一篇很好的文章总结了消息排序的难点:

http://blog.jayway.com/2013/12/20/message-ordering-on-windows-azure-service-bus-queues/

一般来说,我尝试设计消息,以便排序无关紧要。如果不这样做,我建议在消息消费者可以解释的消息中添加序列号。

答案 1 :(得分:0)

不是按顺序发生的发送。这可能是收到的。如果主题已分区(现在是默认主题),我们将在多台计算机上对邮件进行分片。