您正在查看 Apigee 和 Apigee Hybrid 文档。
此主题没有等效的 Apigee Edge 文档。
症状
此问题会显示为 Gateway Timeout
错误,并返回 HTTP 状态 504
。
错误消息
您可能会在 API Monitoring、调试或其他工具中看到此错误。TARGET_READ_TIMEOUT
原因表示 Apigee 运行时在请求执行期间未收到来自目标的及时响应。
默认目标读取超时值 (io.timeout.millis) 为 55 秒。这意味着,如果 55 秒后目标未响应,则 Apigee 会抛出以下错误:
{"fault":{"faultstring":"Gateway Timeout", "detail":{"errorcode":"messaging.adaptors.http.flow.GatewayTimeout", "reason":"TARGET_READ_TIMEOUT"}}}
可能的原因
原因 | 说明 | 适用的问题排查说明 |
---|---|---|
目标速度缓慢 | 目标未生成及时响应。 | Apigee X 和 Apigee Hybrid |
TargetServer 连接问题 | 如果在 TargetEndpoint 上配置了 <LoadBalancer> ,目标会出现一般连接问题。
|
Apigee X 和 Apigee Hybrid |
原因:目标速度缓慢
诊断
您可以使用 Apigee 调试工具诊断目标速度缓慢问题:
- 为 API 代理创建调试会话。
- 在调试会话中,发送请求并检查调试输出。
如上面的示例所示,目标请求超过了 55 秒,即默认目标超时限制。时间限制可配置;如果您更改了超时,则目标请求的时长会与您设置的超时匹配。例如,如果超时时间为 10 秒,则在这种情况下,目标请求将在 10 秒后超时。这种“目标速度缓慢”行为明确表示目标未及时响应请求。
解决方法
Apigee 建议您避免使用慢速目标。 例如,如果正常的目标延迟时间为 50 毫秒,而您遇到的延迟时间为 55,000 毫秒,则可能需要调查目标是否存在问题。
如果您必须增加超时,请按照以下步骤操作:
- 点击代理编辑器中的开发标签页。
- 在导航窗格中,选择受影响的目标端点。
- 在 XML 编辑器中,找到
HTTPTargetConnection
XML 元素:
- 在
<HTTPTargetConnection>
元素下添加io.timeout.millis
属性,并指定新的时间限制(以毫秒为单位),例如:<HTTPTargetConnection> <URL>https://my-very-slow-target.example.com</URL> <Properties> <Property name="io.timeout.millis">120000</Property> </Properties> </HTTPTargetConnection>
在上面的示例中,超时时间增加到 120 秒。请注意,超时时间上限为 300 秒。如需了解详情,请参阅 端点属性参考文档。
- 保存新修订版本并部署代理。
如果问题仍然存在,请前往下面的必须收集的诊断信息。
原因:TargetServer 连接问题
诊断
如果配置了 <LoadBalancer>
端点属性,Apigee 不会揭示连接问题的确切原因。但是,您可以从目标请求过去的时间推断连接问题的原因。作为一种调试方法,您可以尝试完全移除 <LoadBalancer>
元素,并尝试直接在代理中命中目标。
如需诊断问题,请使用调试工具。
- 为 API 代理创建调试会话。
- 在调试会话中,发送请求并检查调试输出。
在上面的示例中,超时发生用了 9 秒钟时间。由于不是 55 秒,您知道错误的原因不是因为目标速度缓慢而超出超时限制。默认情况下,如果在 TargetEndpoint 上使用了 <LoadBalancer>
元素,则 Apigee 会额外重试连接两次。由于您已经知道总共尝试了三次连接,并且连接错误的默认超时为三秒 (connect.timeout.millis),因此您可以假设问题是连接问题。
解决方法
如果确认问题是连接超时,请参阅 VPC 对等互连因 TARGET_CONNECT_TIMEOUT 原因出现“503 服务不可用”错误。
如果是其他问题,请移除 <LoadBalancer>
元素以调试并显示确切的错误代码,然后在错误目录中查找该代码。
必须收集的诊断信息
如果按照上述说明操作后问题仍然存在,请收集以下诊断信息,然后与 Google Cloud 支持团队联系:
- 项目 ID 和 Apigee 组织名称
- 代理名称和环境。
- 问题的时间范围。
- 问题出现的频率
- 目标主机名。
- 包含问题的调试会话。