0

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

在实践中,我通常会看到与发布相对应的 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);
        }
4

1 回答 1

1

两个建议:

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

  2. 如果 #1 没有帮助,它可能是拓扑设置(实体)。检查没有什么比粉丝回到同一个话题更有趣的了。

于 2017-01-25T01:52:07.723 回答