0

我创建了一个 Http 触发的 Python Azure 函数,它需要 3-10 分钟来处理整个业务逻辑,具体取决于数据大小。

使用 postman 或 python web 请求触发此功能时,它只等待响应直到 4 分钟。如果函数在那时执行,它会给出预期的响应,否则它会返回 504 Gateway Time-out 错误。即使它在请求端给出 504 错误,天蓝色函数也会按照预期处理整个负载并且不会失败。

由于请求的响应负责管道中的后续步骤,因此捕获它对我来说变得很重要。我已经尝试过 Get 和 POST 请求。

谁能帮我解决这个问题?

4

2 回答 2

4

如此处所述:

无论函数应用超时设置如何,230 秒都是 HTTP 触发函数响应请求所需的最长时间。这是因为 Azure 负载均衡器的默认空闲超时。对于更长的处理时间,请考虑使用 Durable Functions 异步模式或推迟实际工作并立即返回响应。

所以超时的不是你的函数,而是因为它是一个http触发的函数,所以它是前面的LB。

您应该以不同的方式实施长期运行的流程。例如,通过 http 触发的接收数据。这个获取数据并将其放入队列中。然后你有第二个队列触发的函数,它不会长时间处理并将结果写入某处,例如 blob 存储。

于 2020-02-04T19:08:49.057 回答
0

最后,我找到了解决我面临的问题的方法。

让我在这里重申我的完整场景:

完整场景:我有一个 ADF 管道,Azure 函数是它的组件之一,其次是其他各种。最初的问题发生在我的 AF 执行业务逻辑大约需要 30 分钟,并且 AF 在 4 分钟后自动抛出默认超时响应,这会中断流程并且不会执行 AF 管道中应该在成功后运行的下一个项目在理想情况下完成 AF 组件。

解决方案:我将单个管道断开为 2 个,并使用 azure logic app 连接了两个管道。现在让我解释一下点之间的联系。

我将 azure 函数转换为处理恶魔线程中的所有耗时任务,并返回对我的 HTTP 请求的响应。这解决了我的 4 分钟超时问题。现在第二个问题是在完成 Azure Function(耗时任务)后触发管道中的下一个组件。所以我创建了一个 http 触发逻辑应用,并在 Azure Function 中的任务完成结束时触发它。该逻辑应用依次触发下一个管道并以级联方式执行组件。

于 2020-05-05T20:35:11.920 回答