訊息傳送給提取訂閱者後,訂閱者必須在確認期限內處理並確認 (ack) 訊息。否則,訂閱者必須呼叫修改確認期限,延長期限。
Pub/Sub 高階用戶端程式庫提供租約管理功能,可自動延長尚未確認訊息的期限。根據預設,用戶端程式庫可以發出週期性的 modifyAckDeadline 要求,將期限延長至一小時。Python、Go 和 Java 的高階用戶端程式庫會使用第 99 個百分位數的確認延遲時間,判斷每次延長的時間長度。
相較於設定訂閱層級的屬性,租約管理功能可讓您更精細地控管訊息的確認期限。如果只使用訂閱層級的確認期限,就必須在低值和高值之間取得平衡。值越低,重複訊息的機率就越高;值越高,失敗訊息的重新傳送時間就越晚。判斷正確值可能很困難,尤其是不同訊息的預期處理時間差異很大時。
如要進一步瞭解訂閱項目的屬性 (包括確認期限),請參閱「訂閱項目屬性」。
租約管理設定
您可以在高階用戶端程式庫中設定下列屬性,控管租約管理作業。
最長確認期限。用戶端程式庫可使用
modify acknowledgment deadline
要求延長訊息確認期限的時間上限。這個屬性可讓您決定訂閱端用戶端處理訊息的時間長度。每個確認擴充功能的長度上限。每個
modify acknowledgment deadline
要求可延長確認期限的時間上限。這項屬性可讓您定義 Pub/Sub 重新傳送訊息所需的時間量。如果處理訊息的第一個訂閱者當機或狀態不佳,無法再傳送modify acknowledgment deadline
要求,就會發生重新傳送的情況。每個確認擴充功能的最低時間長度。每個
modify acknowledgment deadline
要求的確認期限至少要延長的時間量。這項屬性可讓您指定訊息重新傳送前必須經過的最短時間。
除非啟用只傳送一次功能,否則系統不保證會遵守確認期限。
手動管理確認期限
使用一元拉取或低階用戶端程式庫時,為避免訊息過期和重新傳送,請使用 modify acknowledgment deadline
要求延長確認期限。例外狀況是 Go 和 C++ 高階用戶端程式庫,使用一元提取時會提供租約管理功能。請參閱下列單元串流提取作業的租約管理範例:
C#
在嘗試這個範例之前,請先按照快速入門:使用用戶端程式庫中的 C# 設定操作說明進行操作。詳情請參閱 Pub/Sub C# API 參考說明文件。
Java
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Java 設定操作說明進行操作。詳情請參閱 Pub/Sub Java API 參考說明文件。
Node.js
在嘗試這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 Pub/Sub Node.js API 參考說明文件。
Python
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Python 設定操作說明來進行。詳情請參閱 Pub/Sub Python API 參考說明文件。
Ruby
以下範例使用 Ruby Pub/Sub 用戶端程式庫 v3。如果您仍在使用第 2 版程式庫,請參閱 第 3 版遷移指南。如要查看 Ruby 第 2 版程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫的操作說明設定 Ruby 環境。詳情請參閱 Pub/Sub Ruby API 參考說明文件。
後續步驟
如要瞭解可為訂閱項目設定的其他傳送選項,請參閱下列文章: