您正在查看 Apigee 和 Apigee Hybrid 說明文件。
這個主題沒有對應的
Apigee Edge 說明文件。
問題
這個問題會顯示為 Gateway Timeout
錯誤,並附上 HTTP 狀態 504
。
錯誤訊息
您可能會在 API 監控、偵錯或其他工具中看到這項錯誤。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 Proxy 建立偵錯工作階段。
- 在偵錯工作階段中傳送要求,並檢查偵錯輸出內容。
如上例所示,目標要求超過 55 秒,也就是預設目標逾時限制。您可以設定時間限制,如果變更逾時期限,則目標要求的時間長度會與您設定的逾時期限相符。舉例來說,如果逾時時間為 10 秒,則在該情況下,目標要求會在 10 秒後逾時。這種「目標速度緩慢」的行為,清楚表明目標無法及時回應要求。
解決方法
Apigee 建議您避免使用慢速目標。舉例來說,如果正常的目標延遲時間為 50 毫秒,而您遇到的延遲時間為 55000 毫秒,則可能需要調查目標是否有問題。
如果您必須增加逾時時間,請按照下列步驟操作:
- 按一下 Proxy 編輯器中的「Develop」分頁標籤。
- 在導覽窗格中,選取受影響的目標端點。
- 在 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 秒為上限。詳情請參閱 Endpoints 屬性參考資料。
- 儲存新修訂版本並部署 Proxy。
如果問題持續發生,請參閱下方的「必須收集診斷資訊」。
原因:TargetServer 連線問題
診斷
當您設定 <LoadBalancer>
端點屬性時,Apigee 不會顯示連線問題的確切原因。不過,您可以根據目標要求的經過時間,推測連線問題的原因。您可以嘗試全部移除 <LoadBalancer>
元素,並嘗試直接在 Proxy 中命中目標,做為偵錯方法。
如要診斷問題,請使用偵錯工具。
- 為 API Proxy 建立偵錯工作階段。
- 在偵錯工作階段中傳送要求,並檢查偵錯輸出內容。
在上例中,逾時時間為九秒。由於並非 55 秒,因此您就知道錯誤並非因為目標速度緩慢而超過逾時限制。根據預設,如果在 TargetEndpoint 上使用 <LoadBalancer>
元素,Apigee 會再重試兩次連線。您知道連線嘗試次數總計為三次,且連線錯誤的預設逾時時間為三秒 (connect.timeout.millis),因此可以推斷問題是連線問題。
解決方法
如果確認問題是連線逾時,請參閱「 VPC Peering 503 Service Unavailable error with TARGET_CONNECT_TIMEOUT」一文。
如有其他問題,請移除 <LoadBalancer>
元素來進行偵錯,並顯示確切的錯誤代碼,然後在錯誤目錄中檢查該代碼。
必須收集診斷資訊
如果問題在按照上述指示後仍未解決,請收集下列診斷資訊,然後與 Google Cloud 支援團隊聯絡:
- 專案 ID 和 Apigee 機構名稱
- 代理程式名稱和環境。
- 問題發生的時間範圍。
- 問題發生的頻率
- 目標主機名稱。
- 偵錯工作階段 (含有問題)。