1

我们正面临服务总线的问题。

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

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

4

1 回答 1

0

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

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

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

于 2016-08-18T14:18:37.330 回答