限制Azure函数只能执行一次



创建blob时,我有一个由EventGrid触发的Azure函数
根据blob的大小(这是一个pdf文件(,我的Azure功能可能需要2秒到600秒(10分钟(的时间来执行。

根据Azure文档,如果ExentGrid在30秒内没有收到来自终点(在这种情况下,终点是我的Azure函数(的响应,则它会重试传递事件。

  • 10秒
  • 30秒
  • 1分钟
  • 5分钟
  • 10分钟
  • 30分钟
  • 1小时
  • 3小时
  • 6小时
  • 每12小时至24小时

我没有看到我上传到存储器的较小文件有任何问题,我的azure函数会执行,希望EventGrid在30秒内收到响应,因此我的函数只执行一次。

问题:对于较大的文件,我的azure函数由事件网格触发(如预期(并开始执行,但由于文件大小较大,我的函数执行时间远远超过30秒。由于事件网格没有从端点收到任何成功响应(因为函数仍在执行(,它发送另一个事件,我的函数为同一个文件启动另一个实例,这样函数就为同一文件执行多次。

我该如何处理这种情况,我可以只为此函数更改事件网格的重试机制吗,或者有更好的方法来处理这个问题吗。

如有任何帮助,我们将不胜感激。

Azure从Azure功能或webhook事件处理程序中寻找及时响应(<30s(,似乎没有设置来增加此时间限制。在接收到事件时,而不是执行实际的long running工作,您必须将message推送到Azurequeue,并让您的函数从该队列中获取消息。这使您只需将工作排入队列,并在30秒内快速返回到Azure事件网格的响应,并且还可以扩展您的事件处理[即使更多的Blob作为突发上传,您的应用程序也可以处理它]。

最新更新