发件人停止运行时 Azure 服务总线队列 ScheduledEnqueueTimeUtc 的行为

Posted

技术标签:

【中文标题】发件人停止运行时 Azure 服务总线队列 ScheduledEnqueueTimeUtc 的行为【英文标题】:Behavior of Azure Service Bus Queue ScheduledEnqueueTimeUtc when sender stops running 【发布时间】:2021-02-24 07:55:33 【问题描述】:

我们有一个用例,我们需要安排将作为消息从 Azure Web api 服务发送到 Azure 服务总线队列的作业。由于我们需要在以后安排它,一种解决方案是使用预定交付ScheduledEnqueueTimeUtc。 我的理解是消息只有在指定的时间到期后才会排队。我担心的是如果 Web API 同时崩溃或升级会发生什么。

1.消息未入队会丢失吗?

2.这个消息在中间时间存放在哪里?

第二种解决方案是使用visibilityTimeOut 的存储队列,其中消息已入队且不受Web API 影响。

    从稳定性和可扩展性的角度来看,哪个是更好的选择?

【问题讨论】:

【参考方案1】:

消息被发送到服务总线,该服务总线根据计划排入队列(可接收)。所以,回答你的问题

    没有 在队列中,只是无法接收 visibilityTimeOut 用于存储队列。请参考comparison doc 做出决定。

请注意,虽然您无法接收预定消息,但您可以peek 它们。

【讨论】:

感谢@pramodvalavala-msft。所以基本上行为明智的 visibilityTimeout 和 ScheduledEnqueueTimeUtc 没有区别。一个用于存储队列,另一个用于服务总线? 是的。那是正确的。可见性超时用于调度(入队)和锁(出队)。

以上是关于发件人停止运行时 Azure 服务总线队列 ScheduledEnqueueTimeUtc 的行为的主要内容,如果未能解决你的问题,请参考以下文章

Azure 服务总线触发队列在本地调试中未命中代码

逻辑应用中的 Azure 服务总线队列错误

从死信队列重新提交消息 - Azure 服务总线

Azure 服务总线向队列中添加消息的速度过快

Azure 服务总线中的数据库/缓存,用于在其他地方完成的队列中的作业

如何基于 Azure 中的服务总线队列自动缩放 Python webjob?