Azure Service Bus如何识别重复的消息?

Pau*_*ner 20 azure azureservicebus

我了解Azure Service Bus具有重复的邮件检测功能,该功能将删除它认为与其他邮件重复的邮件.我想使用此功能来帮助防止一些重复传递.

我很好奇的是服务如何确定两条消息实际上是重复的:

  • 考虑了哪些消息属性?
  • 是否考虑了消息的内容?
  • 如果我发送两条具有相同内容但不同消息属性的消息,它们是否被视为重复?

Mik*_*eWo 31

重复检测正在查看MessageId代理消息的属性.因此,如果您将消息Id设置为每个消息应该是唯一的,重复检测可以捕获它.据我所知,只有消息Id用于检测.不会查看邮件的内容,因此如果您发送的邮件具有相同的实际内容,但具有不同的邮件ID,则不会将其检测为重复邮件.

参考文献:

MSDN文档:http://msdn.microsoft.com/en-us/library/windowsazure/hh367516.aspx

如果场景不能容忍重复处理,则应用程序中需要额外的逻辑来检测可以基于消息的MessageId属性实现的重复,该消息在传递尝试期间保持不变.这称为完全一次处理.

在WindowsAzure.com上还有一个Brokered Message Duplication Detection代码示例,正如您所要求的那样,它应该是您正在寻找的.

我也快速测试了这个并将5条消息发送到一个RequiresDuplicateDetection设置为true 的队列,所有这些消息都具有完全相同的内容但不同MessageIds.然后我检索了所有五条消息.然后我做了反向,我有匹配MessageIds但不同的有效负载,并且只检索了一条消息.