作者:拍友2502885255 | 来源:互联网 | 2022-12-08 10:55
我有一个Azure函数监视Azure服务总线队列,默认锁定持续时间为30秒.此azure函数根据来自队列的消息中的用户信息发送电子邮件通知.
我注意到重复的电子邮件发出并因此检查了跟踪日志,以找出已为同一用户调用了两次azure函数.日志条目如下:
2018-08-09T 14:38:05 .1249371Z - 执行'AzureFunction'(Reason ='在'servicebusqueue'上检测到新的ServiceBus消息.',Id = 4657012a-94ac-4b22-a628-2e94285aeeb7)
2018-08-09 T14:38:33 .3335833Z - 执行'AzureFunction'(Reason ='在'servicebusqueue'上检测到新的ServiceBus消息.',Id = 3ff8eea3-9b9b-43ae-a797-5acf01c2ae6c)
消息只添加到队列一次,我试图了解什么可以生成另一个.可以因为锁定持续时间吗?
1> 小智..:
是的,这可能是由于锁定持续时间.只有在功能执行完成后,才会从队列中完成(接收和删除)消息.如果执行时间超过30秒,则将解锁该消息,使其可用于任何其他接收器.
在您的情况下,接收器将是相同的Azure功能,它再次读取消息,这就是您看到消息的重复处理的原因.
锁定持续时间的最大值为5分钟.如果Azure功能仅在收到邮件时发送电子邮件通知,则可以将锁定持续时间增加到5分钟.电子邮件传输不应该花费那么长时间,因此该消息将不可用于其他接收者.
如果您计划在发送通知之外向Azure功能添加内容,则可以在Azure功能中为锁定设置自动续订,请在此处查看更多详细信息.这将使邮件保持锁定状态,不会留下重复选项.