超过 30 秒的请求超时错误

Posted

技术标签:

【中文标题】超过 30 秒的请求超时错误【英文标题】:Timeout error for requests that take longer than 30 secs 【发布时间】:2021-08-25 17:04:23 【问题描述】:

我们有一个应用程序,它由一些微服务(asp.net core 5.0 Web API 应用程序)和一个网关(Ocelot)组成。一切都配置得很好(CORS)并且工作正常。超过 30 秒的请求除外。我们知道 Ocelot 的默认超时时间是 90 秒,并且没有降低该值的 QoS 策略。这 90 秒在我的开发机器(Windows 10)中有效。我可以在我的开发环境中发出超过 30 秒的请求。我检查了网关的日志以及它们确实成功的微服务,如下所示:

网关日志

[19:48:36 INF] Request finished HTTP/1.1 POST http://gatewaydomain/api/crm/v1/portfolio/getActivityCockpitView  application/json;charset=UTF-8 332 - 200 13082 application/json;+charset=utf-8 47560.9299ms

API 日志

[19:48:36 INF] Request finished HTTP/1.1 POST http://apidomain/api/v1/portfolio/getActivityCockpitView  application/json;charset=UTF-8 332 - 200 - application/json;+charset=utf-8 47554.2577ms

而且我确定它与客户端请求配置无关,我的 Axios 实例配置为:

const service = axios.create(
  timeout: 1000000, // request timeout
  maxContentLength: 200000

)

我还尝试禁用answer 中描述的 chrome 安全设置(以查看它是否与客户端相关),但它不起作用。

我们的应用程序部署在 OpenShift 集群中,我们使用标准 asp.net 5.0 容器 (mcr.microsoft.com/dotnet/aspnet)

而且我们在网关前面没有任何 WAF(还 :))可能会影响我们的请求。

如果我知道可能出了什么问题,我将不胜感激。

编辑:

还设法通过与邮递员的相同请求获得超时。所以看起来这不是 CORS 问题,但仍然不知道是什么导致了超时。

【问题讨论】:

【参考方案1】:

是的,我终于在我失去更多头发之前找到了它:)

原来 Openshift Routes 有默认的 30 秒超时。如果您想扩展该值,您需要编辑您的路由 yaml 文件,如下所示:

 - kind: Route
    apiVersion: v1
    id: "$APPLICATION_NAME-rhdmcentr-http"
    metadata:
      name: "$APPLICATION_NAME-rhdmcentr"
      labels:
        application: "$APPLICATION_NAME"
      annotations:
        haproxy.router.openshift.io/timeout: 90s

取自documentation。

【讨论】:

以上是关于超过 30 秒的请求超时错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上使用 Django 将大文件上传到 AWS S3 存储桶而没有 30 秒的请求超时

XCUI 测试因异步等待失败而失败:超过 30 秒的超时,未达到预期

分布式Erlang:多调用超过请求的超时

Angular如何知道请求是否超时超过三次?

限定页面执行时间,请求超时抛出异常或提示

SQLServer 已超过了锁请求超时时段 1222错误