azure - 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)
该消息仅添加一次到队列中,我试图了解什么会生成另一条消息。可能是因为锁定持续时间吗?
解决方案
是的,这可能是由于锁定持续时间。只有在函数执行完成后,消息才会从队列中完成(接收和删除)。如果执行时间超过 30 秒,则消息将被解锁,使其可供任何其他接收者使用。
在您的情况下,接收者将是相同的 Azure 函数,它会再次读取消息,这就是您看到消息重复处理的原因。
锁定持续时间的最大值为 5 分钟。如果 Azure Function 只是在收到消息时发送电子邮件通知,您可以将锁定持续时间增加到 5 分钟。电子邮件传输不应该花费那么长时间,因此该消息将无法提供给其他接收者。
如果您计划在发送通知之外向 Azure Function 添加一些内容,您可以在 Azure Function 中为锁定设置自动续订,查看此处了解更多详细信息。这将保持消息锁定,没有重复的选项。
推荐阅读
- java - executeBatch() 是否也清除命令列表?
- c# - 添加方法后有关静态局部函数的错误
- c# - 使用 c# Web 浏览器(iframe 中的文本框和按钮)以编程方式登录 Kingdoms.com
- r - 逐行比较给定标准的值,每行只写一个数字(超过/不超过标准)
- javascript - 有没有办法在 React 中使用我的 JS 文件?导出或脚本标签等?
- java - 将xml映射器添加到java代码中myBatis的配置中,路径与接口一不同
- angularjs - UI Bootstrap 弹出框没有事件监听器
- python - 解释 keras 功能中的 SGD
- java - 跳过 RegEx 分组
- wordpress - 如何将 Joomla K2 迁移到 Wordpress