如要接收發布至某項主題的訊息,您必須為該主題建立訂閱項目。只有在訂閱後發布至主題的訊息才能在訂閱者用戶端中找到。訂閱端用戶端會接收並處理發布至主題的訊息。主題可以有多個訂閱項目,但特定訂閱項目屬於單一主題。
主題保留功能可讓連結至主題的訂閱項目,在時間上向後搜尋並重播先前發布的訊息。如要進一步瞭解這項功能,請參閱「重播和清除訊息」主題。
訂閱項目工作流程
訊息傳送給訂閱者後,訂閱者必須確認訊息。
如果訊息已傳送至待提交狀態,但訂閱者尚未確認,則系統會將這則訊息視為未完成的項目。
Pub/Sub 會反覆嘗試提交尚未確認的所有訊息。不過,Pub/Sub 不會嘗試將未完成的訊息提交給同一個訂閱項目的任何其他訂閱者。
訂閱者應該在可設定的限制時間內 (又稱為
ackDeadline
) 確認未完成的訊息。一旦超過期限,系統就不會再將這則訊息視為未完成的項目,而 Pub/Sub 會嘗試重新提交訊息。
訂閱類型
建立訂閱項目時,您必須指定訊息傳送類型。Pub/Sub 提供下列訂閱類型:
提取訂閱項目會使用訂閱端用戶端,向 Pub/Sub 伺服器要求訊息。
推送訂閱項目會使用 Pub/Sub 伺服器,向訂閱者應用程式發出傳送訊息的要求。
匯出訂閱項目可協助您將訊息直接匯出至Google Cloud 資源。這些訂閱項目包括:
BigQuery 訂閱項目會將資料匯出至 BigQuery 資料表。
Cloud Storage 訂閱項目會將資料匯出至 Cloud Storage 值區。
如要選擇符合業務需求的正確訂閱方案,請參閱選擇訂閱類型。建立訂閱項目後,您隨時可以更新訊息傳送類型。
預設訂閱屬性
根據預設,Pub/Sub 會提供至少一次傳送服務,但不會為所有訂閱類型提供排序保證。或者,如果訊息具有相同的排序鍵且位於相同區域,您可以啟用訊息排序功能。設定訊息排序屬性後,Pub/Sub 服務會依照 Pub/Sub 服務接收訊息的順序,傳送含有相同排序鍵的訊息。
Pub/Sub 也支援「僅傳送一次」傳送模式。
一般來說,Pub/Sub 會以發布訊息的順序提交每個訊息一次。不過,訊息有時可能會以錯誤的順序或重複傳送。即使訊息的確認要求已成功傳回,Pub/Sub 仍可能會重新傳送訊息。這類重新提交問題可能會因伺服器端重新啟動或用戶端問題而發生。因此,雖然很少發生,但任何訊息都可能隨時重新傳送。
訂閱者需要遵循冪等原則來處理訊息,才能進行多次提交。
訂閱項目到期
根據預設,訂閱者閒置 31 天後,或訂閱項目未更新,訂閱就會過期。訂閱者活動的例子包括公開連線、主動提取或成功推送。如果 Pub/Sub 偵測到訂閱者活動或訂閱屬性更新,訂閱刪除時鐘就會重新啟動。您可以使用訂閱過期政策設定無活動時間,或是讓訂閱持續存在,不受活動影響。您也可以手動刪除訂閱項目。
雖然您可以利用已刪除訂閱的相同名稱建立新訂閱,但新舊訂閱之間並無關聯。即使已刪除的訂閱有許多未確認訊息,同名的新訂閱在建立時也不會有待處理作業 (沒有等待提交的訊息)。