超过 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 秒的请求超时