Windows Azure Service Bus Queues复制检测如何工作?

时间:2013-05-31 11:48:50

标签: azure duplicates detection servicebus

我知道您可以设置重复检测以使用天蓝色服务总线队列在一段时间内工作。但是,是否有人知道这是否基于队列中的对象?

因此,如果我有一个id为“SO_1”的对象被放入队列并随后被消耗,那么重复检测是否仍然有效?

我认为我要问的是 - 是时间框架和对象,还是只是让队列决定什么是重复的时间框架?

3 个答案:

答案 0 :(得分:15)

http://blog.iquestgroup.com/en/windows-azure-service-bus-duplicate-detection/#.UaiXrd7frIU

  

当我们激活复制时,Windows Azure Service Bus将开始存储我们的消息历史记录。这段时间可以配置为从几分钟到几天不等。如果向服务总线发送重复消息,该服务将自动忽略该消息。

答案 1 :(得分:4)

发布此信息是为了澄清上述答复中的一些误解,

  1. 启用重复检测有助于跟踪在指定时间段内发送到队列或主题中的所有消息的应用程序控制的MessageId。如果发送的任何新消息都带有在时间窗口内已记录的MessageId,则该消息将被报告为已接受(发送操作成功),但是新发送的消息将立即被忽略并丢弃。除MessageId之外,不考虑消息的其他部分。 (其中一个回复引用的博客说消息内容不能重复,这是不正确的。)

  2. 重复检测时间历史记录的默认值现在为30秒,该值的范围可以在20秒到7天之间。

有关更多详细信息,请参见this documentation

答案 2 :(得分:2)

这实际上只是让我觉得,默认似乎是启用它,默认时间是10分钟。 “密钥”是MessageId。在我们的例子中,在大多数情况下,重复检测很好,但在某些情况下这是坏消息(特别是在10分钟范围内)。为了解决这个问题,我们引入了一个“破坏者”:

// For this message, we need to prevent dups from being detected
msg.MessageId = messageId + "_" + DateTime.Now.ToString("u");

如果您只想防止“垃圾邮件”,可以考虑将重复检测窗口设置为最小值(20秒)。 (就个人而言,我希望看到一个低至5秒的阈值。)

允许的当前范围是20秒到7天。