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