与重复检测一起使用时,主题上的Azure Service Bus delayed(scheduled)消息丢失

与重复检测一起使用时,主题上的Azure Service Bus delayed(scheduled)消息丢失,azure,azureservicebus,azure-servicebus-topics,Azure,Azureservicebus,Azure Servicebus Topics,我们正面临服务巴士的问题 我们有一个主题,有两个订阅 我们已经在这些设备上启用了重复检测,时间间隔为1分钟(先尝试2秒)。我们使用重复检测来避免在短时间内处理多条消息(以保持消息之间的时间间隔) 我们使用消息调度(ScheduledEnqueueTimeUtc)重复消息,使其在5分钟后以相同的消息ID显示(每次使用调度创建新消息,并完成旧消息) 工作流程如下(问题): 首次发布消息时(无计划) 消息泵会立即使用此消息,并向主题(UTC)发送一条具有相同详细信息和5分钟计划时间的新消息,希望它在

我们正面临服务巴士的问题

  • 我们有一个主题,有两个订阅
  • 我们已经在这些设备上启用了重复检测,时间间隔为1分钟(先尝试2秒)。我们使用重复检测来避免在短时间内处理多条消息(以保持消息之间的时间间隔)
  • 我们使用消息调度(ScheduledEnqueueTimeUtc)重复消息,使其在5分钟后以相同的消息ID显示(每次使用调度创建新消息,并完成旧消息)
  • 工作流程如下(问题):
    • 首次发布消息时(无计划)
    • 消息泵会立即使用此消息,并向主题(UTC)发送一条具有相同详细信息和5分钟计划时间的新消息,希望它在5分钟后出现
    • 该消息未出现在订阅中
  • 调试时,不会出现此问题
  • 当我们以至少30秒的延迟(计划)发送第一条消息时,它工作正常
  • 如果在禁用重复检测的情况下重新创建主题和订阅,则可以使用上述工作流获取消息

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

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

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


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

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

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


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

    部分解释了该行为。所以我会把它标记为答案。但是原始问题中的第6点仍然没有得到正确的解释。如果你能提供一个复制代码的链接,我可以在这一点上提供帮助。部分解释了行为。所以我会把它标记为答案。但是原始问题中的第6点仍然没有得到正确的解释。如果你能提供一个复制代码的链接,我可以在这一点上提供帮助。