【问题标题】:Azure Service Bus delayed (scheduled) message on Topic is lost when used with Duplicate Detection与重复检测一起使用时,有关主题的 Azure 服务总线延迟(计划)消息丢失
【发布时间】:2016-08-17 10:06:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: azure azureservicebus azure-servicebus-topics


    【解决方案1】:

    这是 ASB 的预期行为。 当一条消息被调度时,它实际上是在延迟出现的代理上排队的。服务器端的 ASB 在消息到达时对消息进行重复数据删除,并使用消息 ID 进行重复数据删除。

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

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

    【讨论】:

    • 部分解释了该行为。所以我会将其标记为答案。但仍然没有正确解释原始问题中的第 6 点
    • 如果你能提供一个复制代码的链接,我可以在这方面提供帮助。
    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 2021-07-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    相关资源
    最近更新 更多