如何使用Azure服务总线主题完成FIFO

一直在寻找具有发布/订阅function的消息总线。 发现AWS SQS不支持FIFO,因此不得不放弃它。 使用Azure Service总线,发现队列确实支持FIFO,但似乎主题不支持FIFO。 主题是我们需要的,他们的pub-to-many-sub模型:(

这只是我失踪的环境吗? 我尝试从我的C#客户端发送100条消息,订阅者以错误的顺序收到消息。 任何提示将不胜感激。 谢谢!

您应该能够通过将属性SupportOrdering设置为true来实现此目的

// Configure Topic Settings TopicDescription td = new TopicDescription("TestTopic"); td.SupportOrdering = true; // Create a new Topic with custom settings string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString); namespaceManager.CreateTopic(td); 

您可以使用会话来获取Azure主题以提供FIFO排序,但这与保证处理消息的顺序并不完全相同。

会议不足以保证这里。 例如,如果您正在使用PeekLock模式,那么超时的消息将返回到队列并被无序处理。 您可以使用ReceiveAndDelete模式来抵消此行为,但这意味着您将失去消息处理的事务性质。

文档可能对这个领域有点亮的原因之一是它不是一个常见的用例。 消息传递是关于解耦虽然异步通信和排序保证在应用程序之间创建时间耦合。

理想情况下,您应该设计有效负载,以便排序无关紧要。 如果失败,请使用允许您丢弃无序接收的消息的时间戳。

这里详细讨论: 不要假设Azure Service Bus中的消息排序