Azure Service Bus主题:为什么导致邮件重复?

时间:2017-01-24 21:06:59

标签: azure azure-servicebus-topics

我一直在生产应用程序中使用Azure Service Bus主题。我的理解是系统在发布时至少保证订阅端消息的一个副本。

在实践中,我通常会看到与发布相对应的1条消息。在一些退化的情况下,虽然我看到倍数。例如:1发布对应于相关订阅中的~20条消息。目前没有任何消费此订阅,这让我相信这是出版逻辑。

在什么情况下消息会大量重复?我认为网络干扰可能会导致这种情况。还有什么?

请注意,默认的重复处理逻辑无法处理此问题。您将拥有多条具有相同正文和不同消息ID的消息 - 我理解这些消息用于建立消息“身份”。

编辑: 我的发布逻辑非常复杂,类似于以下内容:

public void PublishSomeId(Guid someId, int eventDelayInMinutes, string componentName)
        {
            var topicClient = ServiceBusManager.GetTopicClient();

            var message = new BrokeredMessage(someId);
            message.To = componentName;
            message.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddMinutes(eventDelayInMinutes);
            topicClient.Send(message);
        }

1 个答案:

答案 0 :(得分:1)

两个建议:

  1. 确定您的发布商没有复制邮件。在PublishSomeId中添加日志语句,以查看someId值是什么。我怀疑这个方法可以被多次调用。除此之外,如果您没有看到记录的重复项,则可以启用重复项检测。为此,您应该将someId分配给代理消息MessageId。不确定生成重复项的时间段是什么,但您可以进行试验。

  2. 如果#1没有帮助,可以进行拓扑设置(实体)。检查那里没有任何时髦的东西可以像粉丝一样回归同一主题。