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

Raj*_*esh 5 c# azure azureservicebus

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

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

小智 7

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

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

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

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

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


Low*_*can 2

您应该能够通过将属性 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);
Run Code Online (Sandbox Code Playgroud)

  • 我发现这个链接似乎说 SupportOrdering 仅适用于一个消费者。如果是这样的话,我们就会回到 Azure 服务总线队列,不是吗?https://social.msdn.microsoft.com/Forums/windowsserver/en-US/cb32114e-17ba-4acd-84f3-51abb81d2195/does-service-bus-topics-guarantee-ordered-message-delivery?forum=servbus (2认同)