我知道您可以将重复检测设置为使用 azure 服务总线队列在一段时间内工作。但是,有谁知道这是否基于队列中的对象有效?
因此,如果我有一个 id 为“SO_1”的对象被放入队列并随后被消耗,那么重复检测是否仍然有效?
我想我要问的是 - 是时间框架和对象,还是只是让队列决定什么是重复的时间框架?
我知道您可以将重复检测设置为使用 azure 服务总线队列在一段时间内工作。但是,有谁知道这是否基于队列中的对象有效?
因此,如果我有一个 id 为“SO_1”的对象被放入队列并随后被消耗,那么重复检测是否仍然有效?
我想我要问的是 - 是时间框架和对象,还是只是让队列决定什么是重复的时间框架?
http://blog.iquestgroup.com/en/windows-azure-service-bus-duplicate-detection/#.UaiXrd7frIU
当我们激活复制时,Windows Azure 服务总线将开始存储我们的消息历史记录。这段时间可以配置为从几分钟到几天不等。如果重复的消息被发送到服务总线,服务将自动忽略该消息。
发布此内容以澄清上述回复中的一些误解,
启用重复检测有助于跟踪在指定时间窗口内发送到队列或主题的所有消息的应用程序控制的 MessageId。如果在时间窗口内发送任何带有已经记录的 MessageId 的新消息,则该消息被报告为已接受(发送操作成功),但新发送的消息会立即被忽略并丢弃。除了 MessageId 之外,不考虑消息的其他部分。(其中一个回复中引用的博客说消息内容不能重复,这是不正确的)。
重复检测时间历史现在默认值为 30 秒,该值可以在 20 秒到 7 天之间。
有关更多详细信息,请参阅此文档。
这实际上只是咬我,默认似乎是启用它,默认时间是 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 天。