我遇到了一个奇怪的问题。我有一个云服务 A,它将消息放入服务总线队列中,供另一个云服务 B 读取。云服务 B 可能需要大约一秒钟的时间来处理它需要做的事情,然后它将一条消息放回云服务 A 的队列中。当云服务 B 执行此操作时,它使用 ScheduledEnqueueTimeUtc 来延迟大约 1 - 10 秒消息上。
上周五,天蓝色的中断使该应用程序完全瘫痪。当我重新上线时,ScheduledEnqueueTimeUtc 总是会导致至少 10 秒的延迟。例如,我生成一个未来 1 到 10 秒之间的日期时间。我将其设置为 ScheduledEnqueueTimeUtc,并将该时间作为我发送的消息的属性,当我在云服务 A 中收到消息时,我将该日期时间属性与消息的 EnqueuedTimeUtc 属性进行比较。这两次应该很漂亮紧密相连,直到上周五为止,这就是它几个月来一直工作的方式。
所以现在云服务 B 说它会在 1 秒内将此消息放入队列。云服务 A 说它在 12-14 秒内没有进入队列。我在将消息放入队列时使用异步方法。如果我不使用 ScheduledEnqueueTimeUtc,则没有延迟,当我在云服务 A 中查看它们时,时间匹配得足够近。但如果我将 ScheduledEnqueueTimeUtc 设置为未来 1 秒,它似乎不会出现在队列中 12 -14 秒。
我现在通过使用quartz.net 来安排消息而不是设置ScheduledEnqueueTimeUtc 属性来解决这个问题。但这种情况开始发生似乎真的很奇怪。