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

How to accomplish FIFO with Azure service bus topics

一直在寻找具有 publish/subscribe 功能的消息总线。发现AWS SQS不支持FIFO,只好作罢。使用Azure Service bus,发现queues确实支持FIFO,但是Topics好像不支持FIFO。主题是我们所需要的,具有发布到多订阅模型:(

这只是我缺少的设置吗?我尝试从我的 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 模式,则超时的消息将 return 放入队列并被乱序处理。您可以使用 ReceiveAndDelete 模式来应对这种行为,但这意味着您失去了消息处理的事务性质。

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

理想情况下,您应该设计您的有效载荷,这样排序并不重要。如果失败,请使用允许您丢弃乱序接收的消息的时间戳。

这里有更详细的讨论:Don’t assume message ordering in Azure Service Bus