重播與捨棄訊息

Cloud Pub/Sub 訂閱者資料 API (例如提取) 可提供訊息資料的有限存取權。指定訂閱項目的訂閱者通常無法存取已確認的訊息。另外,即使只需要一個子集,訂閱者用戶端仍須處理訂閱項目中的每一則訊息。

搜尋功能可讓您大量變更訊息的確認狀態,進而擴充訂閱者功能。舉例來說,您可以重播先前確認過的訊息,或大量捨棄訊息。此外,您也可以將搜尋功能與快照 (搜尋功能的一部分) 搭配使用,藉此將某個訂閱項目的狀態複製到另一個訂閱項目。請注意,如要復原已確認的訊息,您通常必須事先設定來源訂閱項目,這麼一來就要支付額外的儲存空間費用。

下文將說明各項功能,不過您也可以參考快速入門導覽課程提供的實際操作範例。

運作方式

搜尋時間戳記

時間搜尋功能會將 Cloud Pub/Sub 在特定時間前收到的每一則訊息標示為已確認,並將之後收到的所有訊息標示為未確認。您可以搜尋未來的時間,藉此捨棄訊息。如要重播及重新處理先前確認過的訊息,請搜尋過去的時間。訊息發佈時間是由 Cloud Pub/Sub 伺服器所產生 (詳情請參閱 API 參考資料中的 publishTime)。請注意,由於各個 Cloud Pub/Sub 伺服器之間可能存在時鐘偏差值,且 Cloud Pub/Sub 必須根據發佈要求的抵達時間 (而非來源系統中的事件發生時間) 來運作,因此這種搜尋方法並不精確。

如要搜尋過去時間,您必須先將訂閱項目設為保留已確認的訊息:

搜尋快照

快照功能可讓您擷取訂閱項目的訊息確認狀態。快照一經建立後,(在快照建立完成的當下) 會保留來源訂閱項目中未經確認的所有訊息,以及此後發佈至相同主題的任何訊息。您可以利用快照搜尋主題相同的任何訂閱項目,藉此重播這類未確認訊息。

有別於時間搜尋功能,您不需特別針對訂閱項目執行任何設定就能搜尋快照,只要事先建立快照即可。舉例來說,您可以在部署新的訂閱者程式碼時建立快照,以便在確認作業不如預期或發生錯誤時能夠復原資料。

下列情況會導致快照過期或遭到刪除 (以先發生者為準):

  • 快照在建立後已過了七天效期。
  • 快照中最舊一則未確認訊息的保留時間已超出 message retention duration 屬性指定的上限。

舉例來說,假設訂閱項目的快照含有待處理作業,其中最舊的未確認訊息已保留了一天。即使未達七天效期,該快照也會在六天後過期。這類限制之所以存在,是因為快照設有至少傳送一次的強制保證。

最終一致性

搜尋作業必須嚴格遵守訊息傳送保證。這項保證是指,任何即將根據搜尋條件標示為未確認的訊息,在搜尋作業順利完成後必定會至少傳送一次;但並不代表那則傳送的訊息會立刻與搜尋作業保持一致。因此,即使訊息是在搜尋時間戳記或於快照中經過確認之前發佈,也可能會在搜尋作業後才傳送。某種程度上來說,訊息傳送作業是以最終一致系統的形式配合搜尋作業:訊息傳送作業可能需要一分鐘才能完全生效。

用途

  • 安全地更新訂閱者程式碼。 部署新的訂閱者程式碼時,您或許會擔心新的執行程式碼可能錯認訊息,導致訊息遺失。只要在部署過程中加入快照,即可在新的訂閱者程式碼出錯時復原資料。
  • 針對無法預期的訂閱者問題復原資料。 如果訂閱者問題並未與特定的部署事件建立關聯,您可能會找不到相關的快照。在此情況下,只要您先前曾對訂閱項目啟用「已確認訊息的保留功能」,即可搜尋過去的時間,進而在錯誤發生時復原資料。
  • 節省處理時間和費用。 如有待處理作業內含大量不再相關的訊息,只需執行大量確認作業即可。
  • 在已知資料上測試訂閱者程式碼。 如要測試訂閱者程式碼的效能和一致性,比較實用的做法是在每次測試時都使用相同的資料。快照除了具備功能強大的語意,還能針對指定主題套用至任何訂閱項目 (包括新建立的訂閱項目),因此能協助您做到這點。

後續步驟

您可以將 Cloud Pub/Sub 與 Cloud Dataflow 搭配使用。不過,我們並不建議您透過正在執行的 Cloud Dataflow 管道直接存取 Cloud Pub/Sub 搜尋功能。如要瞭解建議的工作流程,請參閱將 Cloud Pub/Sub 與 Cloud Dataflow 搭配使用

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Pub/Sub 說明文件