与重复检测一起使用时,主题上的 Azure 服务总线延迟(计划)消息丢失

Azure Service Bus delayed (scheduled) message on Topic is lost when used with Duplicate Detection

我们遇到了服务总线问题。

  1. 我们有一个主题,有两个订阅。
  2. 我们已在 1 分钟 window 上启用重复检测(先尝试 2 秒)。我们正在使用重复检测来避免在短时间内处理多个消息(以保持消息之间的间隔)
  3. 我们正在使用消息调度 (ScheduledEnqueueTimeUtc) 在 5 分钟后重复显示具有相同消息 ID 的消息(每次使用计划创建新消息时,并且旧消息已完成)
  4. 工作流程如下(问题):
    • 第一次发布消息(没有安排)
    • 消息泵立即使用此消息,并向主题(UTC)发送具有相同详细信息和计划时间 5 分钟的新消息,预计它会在 5 分钟后出现
    • 消息没有出现在订阅中
  5. 调试的时候没有出现这个问题
  6. 当我们发送 First 消息至少延迟 30 秒(预定)时,它工作正常
  7. 如果我们在关闭重复检测的情况下重新创建主题和订阅,我们可以使用上述工作流程获取消息

由于我们不知道已发布的消息发生了什么,我们需要帮助来确定问题的根本原因。

这是 ASB 的预期行为。 当消息被安排时,它实际上是在延迟出现的代理上排队。服务器端的 ASB 在消息到达时对消息进行去重,并使用消息 ID 进行去重。

在您的情况下,如果您延迟发送第二条消息并处理原始消息,则不会有任何重复数据删除,第二条消息将被排队。如果您不延迟,那么代理将看到与之前发送的尚未完成或 DLQ 的消息相同的 ID,并且将被删除。

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