訂閱者可能因為多種原因而無法處理訊息。舉例來說,訂閱者可能暫時無法擷取必要資料,或是收到格式不符預期的訊息。
如果 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。
設定指數輪詢
控制台
建立新訂閱項目時,您可以按照下列步驟設定指數輪詢重試政策:
- 前往 Google Cloud 控制台的「Pub/Sub subscriptions」(Pub/Sub 訂閱項目) 頁面。
按一下「Create Subscription」 (建立訂閱項目)。
在「Subscription ID」(訂閱項目 ID) 欄位中輸入名稱。
如要瞭解如何命名訂閱項目,請參閱主題或訂閱項目命名指南。
- 從下拉式選單中選擇或建立主題。
訂閱項目會接收來自主題的訊息。
選取「傳送類型」。
在「重試政策」下方,選取「在指數輪詢後重試」。
輸入 0 到 600 秒之間的輪詢時間下限和輪詢時間上限。
預設值為輪詢持續時間下限 10 秒,以及輪詢持續時間上限 600 秒。
- 點選「建立」。
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
:訂閱項目的輪詢時間上限。