经过事件网格触发的Python Azure函数能否在成功运行后继续触发?

问题描述

还有其他几个主题,但是没有一个解决方案,也没有一个与Python函数有关的主题。

背景

  • EventGrid触发的Python Azure函数
  • 当将Blob上传到给定的存储帐户时,
  • 仅创建了EventGrid消息
  • 函数接收消息,从消息URL下载blob并执行“填充”
  • 该功能可以运行几秒钟/分钟(大斑点时最多可以运行120秒)

问题示例:

  • 使用正确的存储帐户将4个文件上传到blob容器
  • 该函数通过4条独立的EventGrid消息成功触发了4次
  • 函数从每封邮件中的URL下载blob,执行“填充”
  • 〜55秒后,又有4条EventGrid消息再次触发该函数(对于相同的4个文件!)
  • 一切重复

多次发生,导致4个文件执行12个函数:

  • 以及函数执行的“工作”中相应的输出

enter image description here

将2500个文件上传到存储帐户时,这太荒谬了!

似乎我需要调整EventGrid重试时间。但我在门户网站中看不到此设置:

enter image description here

如何防止这种行为?

编辑1:然后,今天...上传的16个文件没有问题...为什么EventGrid会不一致地触发此功能?

enter image description here

编辑2:今天再次……无缘无故,一个小时后……尽管没有更多文件上传到存储帐户,EventGrid触发了更多触发器。 / p>

enter image description here

以下是16个正在上传到存储帐户的文件的EventGrid统计信息。

  • 在某些情况下,两次重试之间大约需要1个小时,您可以清楚地看到所有数字。
  • 对我来说很随意

enter image description here

编辑3:对于任何有兴趣的人...

解决方法

基于doc,订阅者(例如EventGridTrigger函数)需要在 30秒之内将响应发送回AEG,否则消息将排队等待重试。 / p>

请注意,当在3分钟内成功接收到来自传递目标端点(订户)的AEG时,将从重试队列中删除该事件。如果启用了Deadlettering功能,则当响应失败代码为400或413时,也会从重试队列中删除该事件。

根据上述情况和您长期运行的订户,AEG在3分钟内发送了重复事件。

我确实建议在解决方案中使用 Push-Pull 模式,例如将事件传递到存储队列。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...