根據快照或時間戳記還原狀態,重新傳送 Pub/Sub 訊息
訊息一經確認,Pub/Sub 就無法擷取。不過,有時您可能需要重播已確認的訊息,例如您誤認訊息時。接著,您可以使用「跳轉」功能,將先前確認的訊息標示為未確認,並強制 Pub/Sub 重新傳送這些訊息。您也可以使用 seek 將未確認的訊息狀態變更為已確認,藉此刪除這些訊息。
搜尋快照或時間戳記,即可重播訂閱項目中的訊息。這份指南提供了一些範例,協助您瞭解如何使用 Seek 重播先前確認過的 Pub/Sub 訊息。
事前準備
-
Set up a Trusted Cloud console project.
Click to:
- Create or select a project.
- Enable the Pub/Sub API for that project.
You can view and manage these resources at any time in the Trusted Cloud console.
-
Install the Google Cloud CLI.
-
設定 gcloud CLI 以使用您的聯合身分。
詳情請參閱「 使用聯合身分登入 gcloud CLI」。
-
如要初始化 gcloud CLI,請執行下列指令:
gcloud init
使用
gcloud
指令列介面使用 gcloud 最簡單的方式是透過 Cloud Shell 。 您也可以使用 Google Cloud CLI 隨附的指令列工具。 如果您是建立全新的 Compute Engine 機器執行個體,且其存取權範圍涵蓋所有 Cloud API 和預設 Debian 映像檔,則表示您已滿足 gcloud CLI 所需的各項設定條件。最簡單的建立方式是透過 Compute Engine UI。在本文的其餘部分,我們將假設您使用其中一個指令列工具。
如要進一步瞭解如何使用 gcloud,請參閱 gcloud 快速入門導覽課程。另請參閱 gcloud 參考資料中的 gcloud pubsub 區段,查看 Pub/Sub
gcloud
指令的完整清單。建立及搜尋快照
建立主題和訂閱項目。如要提升互動性,請設定較短的確認期限:
gcloud pubsub topics create seek-demo-topic gcloud pubsub subscriptions create seek-demo-sub --topic=seek-demo-topic --ack-deadline=10
系統目前尚未在訂閱項目中確認任何訊息,請建立快照以擷取這個狀態:
gcloud pubsub snapshots create my-snapshot --subscription=seek-demo-sub gcloud pubsub snapshots list
您現在可以發佈、提取及確認訊息:
gcloud pubsub topics publish seek-demo-topic --message 'hello, world' gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
請注意,後續的提取程序不會產生任何新訊息 (可能會暫時產生一些重複訊息):
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
您可以搜尋訂閱項目的快照,還原訊息。 請注意,訊息可能不會立即傳送:Pub/Sub 不保證訊息傳送延遲時間。不過可以確定的是,保留在快照中的訊息最終至少會傳送一次:
gcloud pubsub subscriptions seek seek-demo-sub --snapshot=my-snapshot gcloud pubsub subscriptions pull seek-demo-sub --auto-ack
請注意,只要訂閱項目與快照的主題相同,您就可以將其他訂閱項目設為同一張快照:
gcloud pubsub subscriptions create seek-demo-sub2 --topic=seek-demo-topic --ack-deadline=10 gcloud pubsub subscriptions seek seek-demo-sub2 --snapshot=my-snapshot
從
seek-demo-sub2
提取訊息時,現在會產生在建立seek-demo-sub2
前發布的訊息:gcloud pubsub subscriptions pull seek-demo-sub2 --auto-ack
完成快照的相關操作後,請進行清理:
gcloud pubsub snapshots delete my-snapshot
根據時間戳記還原狀態
如要重播已確認的訊息,也可以搜尋時間戳記。如要根據時間戳記還原狀態,請先使用
retain-acked-messages
將訂閱項目設為保留已確認的訊息。如果設定retain-acked-messages
,Pub/Sub 會將已確認訊息保留 7 天。以下這個步驟不適用於搜尋快照,只有在您打算搜尋時間戳記的情況下才需執行。
gcloud pubsub subscriptions update seek-demo-sub --retain-acked-messages
您現在可以發佈、提取及確認訊息:
gcloud pubsub topics publish seek-demo-topic --message 'hello, world' gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
下一個提取程序應該不會傳回任何訊息:
gcloud pubsub subscriptions pull seek-demo-sub
現在請將訂閱項目回溯到過去的時間,以復原訊息。 請注意,GNU 和 BSD (MacOS) 版本的 date 指令,其日期算術標記有所不同:
export TS_FORMAT=%Y-%m-%dT%H:%M:%SZ gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u -d '-10 min' +$TS_FORMAT)
如要進一步瞭解支援的時間格式,請參閱 gcloud topic datetimes。
後續的提取程序應該會再次產生訊息:
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
透過搜尋功能,您也可以選擇不傳送在特定時間點 (例如目前時間) 以前發佈的所有訊息,方法是搜尋當前時間的訂閱項目,並將之前的所有訊息標示為已確認:
gcloud pubsub topics publish seek-demo-topic --message 'hello, world' gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u +$TS_FORMAT)
經過一些傳播延遲時間 (大約 60 秒) 後,系統就不會再傳送訊息。如需確認,您可以重複執行不會確認訊息的提取指令:
gcloud pubsub subscriptions pull seek-demo-sub
使用 Cloud 控制台
您可以在 Cloud 控制台的訂閱項目詳細資料頁面中建立快照,或尋找現有快照。如需快照命名規則,請參閱「資源名稱」。
建立快照
前往 Trusted Cloud 控制台的「Pub/Sub subscriptions」(Pub/Sub 訂閱項目) 頁面。
從清單中選取訂閱項目。
按一下 [Create snapshot] (建立快照)。
輸入快照的 ID,然後按一下「建立」儲存。
您可以在 Trusted Cloud 控制台的快照頁面查看快照。您也可以在個別主題的詳細資料頁面中管理快照。
重新播放訂閱內容
在「Replay messages」(重播訊息) 對話方塊中,您可以跳轉至過去的時間點或已儲存的快照。如要開啟對話方塊,請按照下列步驟操作:
前往 Trusted Cloud 控制台的「Pub/Sub subscriptions」(Pub/Sub 訂閱項目) 頁面。
從清單中選取訂閱項目。
按一下「重播訊息」。
在「Seek」(搜尋) 下方,選取「To a previous time point」(跳轉至過去的時間點) 或「To a snapshot」(跳轉至快照),然後選取要跳轉的時間點或快照。
按一下「搜尋」即可重播訊息。
還順利嗎?
請注意,Pub/Sub 支援頁面提供其他資源及連結。
後續步驟
請參閱重播及捨棄訊息。