訂閱項目重試政策

訂閱者可能因為多種原因而無法處理訊息。舉例來說,訂閱者可能暫時無法擷取必要資料,或是收到格式不符預期的訊息。

如果 Pub/Sub 嘗試傳送訊息,但訂閱端無法確認,Pub/Sub 會自動嘗試重新傳送訊息。這項重新傳送的嘗試稱為訂閱項目重試政策。這項功能無法開啟或關閉,但您可以選擇要使用的重試政策類型。

事前準備

  • 建立主題,以便搭配含有訂閱項目重試政策的訂閱項目使用。

必要的角色

如要取得管理主題和訂閱項目所需的權限,請要求管理員授予您專案的 Pub/Sub 編輯者(roles/pubsub.editor) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

您可以在專案層級和個別資源層級設定存取權控管。您可以在一個專案中建立訂閱項目,並將其附加至位於其他專案的主題。請確認您具備每個專案的必要權限。

重試政策類型

首次建立及設定訂閱項目時,您可以選擇使用下列其中一項重試政策:「立即重新傳送」或「指數輪詢」。根據預設,訂閱項目會立即重新傳送。

立即重新配送

根據預設,Pub/Sub 會立即嘗試重新傳送訊息 (可能傳送至相同的訂閱端用戶端)。不過,如果導致訊息確認失敗的條件未變更,立即重新傳送可能會造成問題。在這種情況下,Pub/Sub 可能會重新傳送多則無法確認的訊息。

如要解決立即重新傳送的問題,Pub/Sub 可讓您設定指數輪詢政策。

指數輪詢

指數輪詢可讓您在每次重試之間加入逐漸增加的延遲時間。首次傳送失敗後,Pub/Sub 會等待最短的輪詢延遲時間,然後再重試。每次連續傳送失敗,延遲時間就會增加,最多可達延遲上限 (0 和 600 秒)。

延遲間隔上限和下限並非固定值,應根據應用程式的當地因素進行設定。

請注意下列有關指數輪詢的注意事項:

  • 指數輪詢會在下列動作中觸發:
    • 收到負面確認訊息時。
    • 訊息的確認期限已過。
  • 指數輪詢延遲只會套用至個別訊息,而非訂閱項目 (全域) 中的所有訊息。
  • 使用指數輪詢時,即使先前收到的訊息收到負面確認,Pub/Sub 仍會繼續傳送其他訊息 (除非您使用依序傳送訊息功能)。

使用重試政策延遲傳送及處理部分訊息,以因應傳送訊息時暫時無法處理部分訊息的情況。這項功能會盡力執行,並分別評估每則訊息的重試政策。

我們不建議使用這項功能,刻意延遲訊息傳送時間。如果對設定重試政策的訂閱項目,大量負面確認 (nack) 訊息,部分訊息可能會以較少或沒有退避的方式傳送。如果您對大量訊息發出否定確認,Pub/Sub 也可能會減緩所有訊息的傳送速度。

如需排定傳送時間,請考慮使用 Cloud Tasks

設定指數輪詢

控制台

建立新訂閱項目時,您可以按照下列步驟設定指數輪詢重試政策:

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

前往「訂閱」頁面

  1. 按一下「Create Subscription」 (建立訂閱項目)

  2. 在「Subscription ID」(訂閱項目 ID) 欄位中輸入名稱。

如要瞭解如何命名訂閱項目,請參閱主題或訂閱項目命名指南

  1. 從下拉式選單中選擇或建立主題。

訂閱項目會接收來自主題的訊息。

  1. 選取「傳送類型」

  2. 在「重試政策」下方,選取「在指數輪詢後重試」

  3. 輸入 0 到 600 秒之間的輪詢時間下限輪詢時間上限

預設值為輪詢持續時間下限 10 秒,以及輪詢持續時間上限 600 秒。

  1. 點選「建立」

gcloud

如要建立新的訂閱項目並採用指數輪詢重試政策,請執行下列 gcloud pubsub create 指令。

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --min-retry-delay=MIN_RETRY_DELAY \
  --max-retry-delay=MAX_RETRY_DELAY

更改下列內容:

  • SUBSCRIPTION_ID:訂閱項目的專屬 ID。
  • TOPIC_ID:要附加訂閱項目的主題 ID。
  • MIN_RETRY_DELAY:訂閱項目的最短輪詢延遲時間。
  • MAX_RETRY_DELAY:訂閱項目的輪詢時間上限。

後續步驟