Azure 服务总线 - 锁定持续时间和重复,它们有何关系?

标签 azure azure-functions azureservicebus azure-servicebus-queues azure-servicebus-topics

我有一个 Azure 函数,用于监视 Azure 服务总线队列,默认锁定持续时间为 30 秒。此 azure 函数根据来自队列的消息中的用户信息发送电子邮件通知。

我注意到发出了重复的电子邮件,因此检查了跟踪日志,发现同一用户已调用 azure 函数两次。日志条目如下:

2018-08-09T14:38:05.1249371Z - 执行“AzureFunction”(原因=“在“servicebusqueue”上检测到新 ServiceBus 消息。”,Id=4657012a-94ac -4b22-a628-2e94285aeeb7)

2018-08-09T14:38:33.3335833Z - 执行“AzureFunction”(原因=“在“servicebusqueue”上检测到新 ServiceBus 消息。”,Id=3ff8eea3-9b9b -43ae-a797-5acf01c2ae6c)

该消息仅添加到队列中一次,我正在尝试了解什么可以生成另一条消息。难道是因为锁定时间的原因?

最佳答案

是的,这可能是由于锁定持续时间造成的。只有在函数执行完成后,消息才会从队列中完成(接收并删除)。如果执行时间超过 30 秒,消息将被解锁,使其可供任何其他接收者使用。

在您的情况下,接收者将是相同的 Azure 函数,它会再次读取消息,这就是您看到消息重复处理的原因。

锁定持续时间的最大值为 5 分钟。如果 Azure Function 在收到消息时仅发送电子邮件通知,则可以将锁定持续时间增加到 5 分钟。电子邮件传输不应花费那么长时间,以便其他收件人无法收到该消息。

如果您除了发送通知之外还计划在 Azure Function 中添加一些内容,可以在 Azure Function 中设置锁的自动续订,请查看 here更多细节。这将使消息保持锁定状态,不留下重复的选项。

关于Azure 服务总线 - 锁定持续时间和重复,它们有何关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51772259/

相关文章:

azure - Microsoft azure 项目名称呈灰色

Azure Function Blob 触发器 CloudBlockBlob 绑定(bind)

azure - 公开可用的 Azure 服务总线主题

c# - 从连接字符串创建 ASB MessagingFactory 并提供设置

node.js - 永远运行 sudo 命令

node.js - Azure Web 应用程序 : deploying Angular SPA & Node Express server from Github repository

javascript - 在 Azure Functions Typescript 中使用 IBinder?

azure - MailChimp API Webhook header

.net - 有什么方法可以在 azure 事件中心中使用 EventProcessorHost 检索跳过的事件吗?

azure - LetsEncrypt Azure WebJob 等待重新启动