Http 触发器启用 Azure 函数超时

Posted

技术标签:

【中文标题】Http 触发器启用 Azure 函数超时【英文标题】:Http trigger enable Azure function timeout 【发布时间】:2020-07-03 19:50:37 【问题描述】:

最近我开发了 Azure 功能,可以作为 web 钩子和 http 触发器启用。在这个函数中,我得到了 JSON 有效载荷,其中包含下载 URL。

我担心在某些情况下下载内容可能有大文件(大约 200 MB 到 300 MB),并且根据 Azure 文档,http 触发器启用 azure 函数超时为 MAX = 230 秒。

我已经在使用 async/await 来下载如下文件。

await fileBlob.UploadFromStreamAsync(webClient.OpenRead(downloadItem.DownloadUrl));

我的问题如下。

    如果我的函数超时,还有哪些替代选项? 当我从第三方服务器下载文件时,Azure 是否会继续计算秒数? 在我的 JSON 负载中,我有 2-3 个下载 URL。怎样才能开始下载所有的URL并行而不是一个一个?

【问题讨论】:

【参考方案1】:

听起来非常适合耐用功能 - Fan-out pattern: https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-cloud-backup?tabs=csharp

您的 http 触发函数将启动一个协调器。这将启动 n 个活动功能。每个 URL 一个。

【讨论】:

感谢您的回复。我确实探索了这个选项,但这里的问题是单个工作函数也可能超时。就像您提到的那样,编排器将启用 2-3 个子函数来下载文件,但在子函数内部,可能会对其施加 243 秒的超时限制。你的想法? 活动函数不受240秒的HTTP超时时间的约束,只与一般的函数超时时间(在消费计划中运行时)绑定。但这至少需要 5 分钟 好的。你的意思是说 Main Orchestrator 函数是 HTTP 绑定的,因此有 240 秒的超时时间,而子函数不是 http 绑定的,因此它的超时时间至少为 5 分钟? 几乎:您将拥有三个功能:1) HTTP 触发(受 240 秒 HTTP 超时限制)。 2)Orchestrator(实际上不是任何超时约束)。 3)Activity Function(受通用Function超时约束,至少5min) 好的。知道了。意味着 1) 第三方服务器将启用主要的 HTTP 触发器启用功能,该功能将提取必要的数据并激活 2) 协调器功能,这将进一步启用 3) 多个活动功能。此处 240 秒超时仅适用于 HTTP,Orchestrator & Activity 函数有 5 分钟的最小超时,根据 Azure 文档可以延长至 10 分钟或更长时间。

以上是关于Http 触发器启用 Azure 函数超时的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 按需触发 Azure 函数多次调用自身

多个 HTTP 请求触发 HTTP Client 超时

Azure 存储队列触发 Azure 函数高可用性

在 Azure WebJob 中动态启用/禁用触发功能

Azure Functions ServiceBus 触发器缩放行为

保护非 Http 触发的 Azure 函数,如服务总线触发器