【发布时间】:2021-02-16 12:38:58
【问题描述】:
还有其他几个主题,但没有一个提供解决方案或没有与 Python 函数有关。
背景:
- EventGrid 触发,Python Azure 函数
- 仅在将 blob 上传到给定存储帐户时创建 EventGrid 消息
- 函数接收消息,从消息 URL 下载 blob 并执行“stuff”
- 函数可以运行几秒/分钟(对于大型 blob,最长可达 120 秒)
问题示例:
- 4 个文件上传到正确存储帐户中的 blob 容器
- 函数成功触发了 4 次,由 4 条单独的 EventGrid 消息触发
- 函数从每条消息中的 URL 下载 blob,执行“stuff”
- ~55 秒后,又有 4 条 EventGrid 消息再次触发函数(对于相同的 4 个文件!)
- 一切都在重复
这种情况多次发生,导致 4 个文件执行 12 次函数:
- 以及相应的输出来自函数所做的“东西”!
当 2500 个文件上传到存储帐户时变得可笑!
似乎我需要调整 EventGrid 重试时间。但我在门户中没有看到此设置:
如何防止这种行为?
编辑 1: 那么今天...上传了 16 个文件没有问题...为什么 EventGrid 会不一致地触发此函数?
编辑 2: 今天又一次......无缘无故,〜一个小时后...... EventGrid 触发了更多触发器,尽管没有更多文件已上传到存储帐户。
以下是上传到存储帐户的 16 个文件的 EventGrid 统计信息。
- 您可以清楚地看到数字无处不在,在某些情况下,重试间隔约为 1 小时。
- 在我看来很随意
编辑 3: 任何有兴趣的人...
- 似乎正在发生的事情是:EventGrid 由存储帐户中的 两个 事件触发,用于上传SINGLE 个文件。
- 这将生成两个 EventGrid 架构(一个用于 "Microsoft.Storage.BlobCreated event",一个用于 "Microsoft.Storage.BlobCreated event (Data Lake Storage Gen2)"
- 由于 EventGrid 消息的
data.url参数不同(xxx.blob.core.windows.net与xxx.dfs.core.windows.net),我的函数失败(因为它使用BlobClient.from_blob_url - 更多内容。
【问题讨论】:
标签: python triggers azure-functions azure-eventgrid retry-logic