首页 > 解决方案 > 超过 30 秒的请求超时错误

问题描述

我们有一个应用程序,它由一些微服务(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

})

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

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

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

我会很感激任何关于可能出错的想法。

编辑 :

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

标签: asp.net-coreopenshiftocelot

解决方案


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

事实证明 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

取自文档


推荐阅读