【发布时间】:2017-01-24 21:06:58
【问题描述】:
我一直在生产应用程序中使用 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);
}
【问题讨论】:
-
回答这个问题需要更多细节。你的发布逻辑是什么?如果您使用不同的 ID 发布相同的有效负载 20 次,那么是的,您将拥有该事件的 20 个“副本”。你的拓扑是什么样的?如果没有这些信息的回答,这是非常猜测。
-
我已编辑问题以添加与我的实际实现非常相似的代码示例。有趣的是,我看到了大约 20 条正文为“someId”的消息。在日志的帮助下,我知道这个方法只被 'someId' 调用过一次。
-
确实,没什么特别的。您在该主题下的主题设置是什么?
-
我有一个主题下有 10 个订阅。
-
我明白了。但是,您的设置中的某些内容有所不同。发件人很简单。接收器也是如此。缺少拓扑。需要看看。在 gmail 的电子邮件 lastname.firstname 上联系我。
标签: azure azure-servicebus-topics