排解酬載解除包裝問題

本頁面說明如何解決酬載解除包裝問題。

HTTP 狀態碼錯誤

使用有效負載解除包裝時,可能會發生常見的 HTTP 狀態碼錯誤。您可以使用 push_request_count 指標監控錯誤。

400 錯誤的要求

如果 Pub/Sub 無法處理要求,可能是因為設定有誤或缺少資料,

400 Bad Request

發生這項錯誤的原因如下:以下是幾個最常見的錯誤原因:

  • 酬載 (訊息資料) 不符合 HTTP 端點指定的預期要求格式。
  • 缺少處理要求所需的標頭。
  • 訂閱項目設定的 HTTP 端點有誤。

如要解決這個問題,請嘗試下列方法:

  • 檢查酬載 (訊息資料) 的格式。請確認格式符合 HTTP 端點指定的預期要求格式。
  • 確認要求包含必要標頭。如果缺少標頭,可能需要在訊息屬性中新增。舉例來說,您可能需要加入 Content-Type,但其他項目也可能不可或缺。
  • 確認為訂閱項目設定的 HTTP 端點有效。
  • 在推送訂閱項目中啟用無效信件佇列 (DLQ)。系統會將無法傳送的個別訊息重新導向至這個地址。如果看到少量 400 錯誤,且想要檢查這些錯誤,建議啟用 DLQ。

401 未授權 / 403 禁止

如果 Pub/Sub 無法處理要求,可能是因為憑證不正確或無效,就會發生下列錯誤。

401 unauthorized / 403 forbidden

發生這項錯誤的原因是推送訂閱項目未通過驗證。

如要解決這個問題,請嘗試下列方法:

  • 啟用推送驗證。如果您要與 Cloud Run 或 App Engine 整合,請務必使用推播驗證。

    如果您的解決方案不支援推播驗證,您可能需要在發布訊息屬性中加入自己的授權金鑰或 API 金鑰。

415 不支援的媒體類型

如果酬載格式不受支援,Pub/Sub 就無法處理要求,並會發生下列錯誤。

415 Unsupported Media Type

發生這項錯誤的原因如下:以下是幾個最常見的錯誤原因:

  • 端點缺少必要的媒體類型標頭。

如要解決這個問題,請嘗試下列方法:

  • 您的端點可能需要 Content-Type 標頭。根據預設,有效負載解除包裝不會設定媒體類型標頭。您可以將 Content-Type 標頭附加為發布訊息屬性,藉此設定標頭。

431 要求標頭欄位過大 / 413 內容過大

如果要求傳送的內容過大,Pub/Sub 無法處理要求,就會發生下列錯誤。

431 request header fields too Large / 413 content too large

如果 Pub/Sub 訊息中的屬性超過伺服器的標頭大小限制,就會發生這個錯誤。

如要解決這些問題,請嘗試下列解決方法:

  • 關閉「寫入中繼資料」
  • 在推送訂閱項目中啟用無效信件佇列 (DLQ)。系統會將無法傳送的個別訊息重新導向至這個地址。之後,訂閱項目會繼續運作,但含有錯誤的訊息會重新導向至另一個主題,以供進一步分析。

檢查是否已啟用酬載解除包裝功能

  1. 前往 Google Cloud 控制台的「Subscriptions」(訂閱項目) 頁面。

    開啟 Pub/Sub 訂閱項目

  2. 按一下服務名稱。

    服務詳細資料頁面隨即開啟。

  3. 在設定表格中,找出「Message data unwrapping」(訊息資料解除包裝) 和「Write message metadata」(寫入訊息中繼資料) 這兩個值。

    對應的表格列會顯示酬載包裝狀態 (已啟用或已停用)。

後續步驟

  • 如果仍無法解開酬載包裝,請參閱「取得支援」。