首页 > 解决方案 > Azure 服务总线 - 锁定持续时间和重复,它们有什么关系?

问题描述

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

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

2018-08-09T 14:38:05 .1249371Z - 执行'AzureFunction'(原因='在'servicebusqueue'上检测到新的ServiceBus消息。',ID = 4657012a-94ac-4b22-a628-2e94285aeeb7)

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

该消息仅添加一次到队列中,我试图了解什么会生成另一条消息。可能是因为锁定持续时间吗?

标签: azureazure-functionsazureservicebusazure-servicebus-queuesazure-servicebus-topics

解决方案


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

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

锁定持续时间的最大值为 5 分钟。如果 Azure Function 只是在收到消息时发送电子邮件通知,您可以将锁定持续时间增加到 5 分钟。电子邮件传输不应该花费那么长时间,因此该消息将无法提供给其他接收者。

如果您计划在发送通知之外向 Azure Function 添加一些内容,您可以在 Azure Function 中为锁定设置自动续订,查看此处了解更多详细信息。这将保持消息锁定,没有重复的选项。


推荐阅读