我一直在生产应用程序中使用 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);
}