504 閘道逾時 - 目標讀取逾時

您正在查看 ApigeeApigee 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 偵錯工具診斷目標速度緩慢的問題:

  1. 為 API Proxy 建立偵錯工作階段
  2. 在偵錯工作階段中傳送要求,並檢查偵錯輸出內容。

如上例所示,目標要求超過 55 秒,也就是預設目標逾時限制。您可以設定時間限制,如果變更逾時期限,則目標要求的時間長度會與您設定的逾時期限相符。舉例來說,如果逾時時間為 10 秒,則在該情況下,目標要求會在 10 秒後逾時。這種「目標速度緩慢」的行為,清楚表明目標無法及時回應要求。

解決方法

Apigee 建議您避免使用慢速目標。舉例來說,如果正常的目標延遲時間為 50 毫秒,而您遇到的延遲時間為 55000 毫秒,則可能需要調查目標是否有問題。

如果您必須增加逾時時間,請按照下列步驟操作:

  1. 按一下 Proxy 編輯器中的「Develop」分頁標籤。
  2. 在導覽窗格中,選取受影響的目標端點。
  3. 在 XML 編輯器中,找出 HTTPTargetConnection XML 元素:

  4. <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 屬性參考資料

  5. 儲存新修訂版本並部署 Proxy。

如果問題持續發生,請參閱下方的「必須收集診斷資訊」。

原因:TargetServer 連線問題

診斷

當您設定 <LoadBalancer> 端點屬性時,Apigee 不會顯示連線問題的確切原因。不過,您可以根據目標要求的經過時間,推測連線問題的原因。您可以嘗試全部移除 <LoadBalancer> 元素,並嘗試直接在 Proxy 中命中目標,做為偵錯方法。

如要診斷問題,請使用偵錯工具

  1. 為 API Proxy 建立偵錯工作階段
  2. 在偵錯工作階段中傳送要求,並檢查偵錯輸出內容。

在上例中,逾時時間為九秒。由於並非 55 秒,因此您就知道錯誤並非因為目標速度緩慢而超過逾時限制。根據預設,如果在 TargetEndpoint 上使用 <LoadBalancer> 元素,Apigee 會再重試兩次連線。您知道連線嘗試次數總計為三次,且連線錯誤的預設逾時時間為三秒 (connect.timeout.millis),因此可以推斷問題是連線問題。

解決方法

如果確認問題是連線逾時,請參閱「 VPC Peering 503 Service Unavailable error with TARGET_CONNECT_TIMEOUT」一文。

如有其他問題,請移除 <LoadBalancer> 元素來進行偵錯,並顯示確切的錯誤代碼,然後在錯誤目錄中檢查該代碼。

必須收集診斷資訊

如果問題在按照上述指示後仍未解決,請收集下列診斷資訊,然後與 Google Cloud 支援團隊聯絡:

  1. 專案 ID 和 Apigee 機構名稱
  2. 代理程式名稱和環境。
  3. 問題發生的時間範圍。
  4. 問題發生的頻率
  5. 目標主機名稱。
  6. 偵錯工作階段 (含有問題)。