与重复检测

时间:2016-08-17 10:06:06

标签: azure azureservicebus azure-servicebus-topics

我们正面临Service Bus的问题。

  1. 我们有一个主题,有两个订阅。
  2. 我们已经启用了重复检测,窗口为1分钟(首先尝试2秒)。我们正在使用重复检测来避免在短时间间隔内处理多个消息(以维持消息之间的间隔)
  3. 我们正在使用消息调度( ScheduledEnqueueTimeUtc )重复5分钟后显示的消息,具有相同的消息ID(每次创建带有计划的新消息,并且旧消息已完成)
  4. 工作流程如下(问题):
    • 首次发布消息(无需安排)
    • 消息泵立即使用此消息,并向主题(UTC)发送具有相同详细信息和5分钟调度时间的新消息,期望在5分钟后显示该消息
    • 消息未显示在订阅
  5. 调试时,此问题未出现
  6. 当我们发送第一个消息至少延迟30秒(预定)时,它正常工作
  7. 如果我们重置关闭重复检测的主题和订阅,我们就可以使用上述工作流程获取消息
  8. 由于我们不知道发布的消息发生了什么,我们需要帮助来确定问题的根本原因。

1 个答案:

答案 0 :(得分:0)

这是ASB的预期行为。 在安排消息时,它实际上已在具有延迟外观的代理上排队。服务器端的ASB在到达时重复消息,并使用消息ID进行重复数据删除。

在您的情况下,如果您延迟发送第二条消息并处理原始消息,则无需删除任何内容,第二条消息将被排队。如果您没有延迟,那么代理将看到与之前发送的尚未完成或DLQed的消息相同的ID,并且它将被删除。

可能的方法是重用相同的传输消息ID(用于BrokeredMessage的ID)。如果您需要关联消息,可以使用Properties