【问题标题】:Issue with client requesting Azure API Management endpoint - Error: ClientConnectionFailure: at transfer-response客户端请求 Azure API 管理端点的问题 - 错误:ClientConnectionFailure: at transfer-response
【发布时间】:2019-05-01 15:43:32
【问题描述】:

我有一个 nodejs 客户端向 azure api 管理端点发出请求。我有时会收到以下异常:

ClientConnectionFailure: at transfer-response

所以我正在使用请求包,并且在客户端我正在做一个简单的请求:

request({
            method: "GET",
            headers: {
                "contentType": "application/json",
                "Ocp-Apim-Subscription-Key": key
            },
            uri: endpointUrl
        }, function (error, response, body) {
            (...)
        });

那么,在请求的中间,客户端最终是否会发生超时,从而导致与 Azure APIM 端点的连接失败? 或者是其他东西?你认为我可以如何解决这个问题?我想过增加请求中的超时时间,但我假设在省略超时时,它假设服务器(Azure Function App)的默认超时时间为 120 秒,对吧?

谢谢。

【问题讨论】:

  • 在没有 APIM 的情况下,您的函数是否也需要很长时间才能处理?如果没有,您能否查看trace 看看发生了什么?
  • 这是一个间歇性问题,因此很难跟踪请求,因为我无法重现它。此外,由 apim 实例调用的后端函数正在标准计划下运行,所以我认为它在性能方面应该没问题。根据 App Insights,在过去 30 天内,该函数的最长执行时间为 18,040.338 MS = 0.3 分钟。

标签: azure azure-api-management


【解决方案1】:

ClientConnectionFailure 表明客户端在 APIM 处理请求时中断了连接。 at transfer-response 表示这发生在 APIM 向客户端发送响应时。 APIM 默认情况下不缓存请求/响应正文,因此当它向客户端发送响应时,它同时从后端读取它。如果后端响应实际数据的时间过长,这可能会导致客户端断开连接。

这种行为纯粹是由客户端决定停止等待数据驱动的。在您发送请求之前检查您在客户端上需要多长时间并查看错误。尝试调整客户端超时。

【讨论】:

  • 我们决定联系微软支持,在分析日志后,客户端(函数应用)在 APIM 实例完成传输所有信息之前关闭连接,因此 APIM 引发了该错误。无论如何感谢大家的帮助
  • @HugoBarona 嘿,Microsoft 建议您的客户端(功能应用程序)修复什么?我面临同样的问题并寻找可能的解决方案。这是线程:stackoverflow.com/questions/70512357/…
  • @user42012 我用我的发现回复了你的帖子。让我知道事情的后续。祝你好运!
  • 谢谢@HugoBarona,感激不尽!
【解决方案2】:

当后端响应时间过长时,我们已经看到了这种行为。

我的方法是先看看后端,在这种情况下是函数应用程序,看看花费的时间,然后看看是否有timeout limit在 APIM 设置.

函数应用的超时持续时间由 host.json 项目文件中的 functionTimeout 属性定义。下表显示了两个计划和两个运行时版本的默认值和最大值(以分钟为单位):

要解决性能问题,请关注Troubleshoot slow app performance issues in Azure App Service

【讨论】:

  • 我们在后端有一个功能应用,使用标准应用服务计划。运行时间是 1x。我在主机文件中没有超时。 apim 实例,我没有超时策略。客户端是否有可能发生超时,调用 apim 实例?客户端是一个在消费计划上运行的功能应用程序,它没有在主机文件上配置超时,但它正在向实例发出请求。所以,我的观点是,根据例外情况,通信是否可能在客户端而不是后端中断?
  • 无论函数应用超时设置如何,230 秒都是 HTTP 触发函数响应请求所需的最长时间。这是因为 Azure 负载均衡器的默认空闲超时。
  • 这些函数是由事件网格事件触发的。但即使考虑相同的超时时间,230 秒 => 3.83 分钟。我的客户端函数在过去 30 天内执行最慢,为 76 秒。我的后端函数由 apim 实例调用,在过去 30 天内最多执行 0.3 分钟。
猜你喜欢
  • 2022-01-27
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2021-10-04
  • 2015-08-17
  • 2022-09-28
  • 2018-06-21
  • 2020-08-05
相关资源
最近更新 更多