根據快照或時間戳記還原狀態,重新傳送 Pub/Sub 訊息

訊息一經確認,Pub/Sub 就無法擷取。不過,有時您可能需要重播已確認的訊息,例如您誤認訊息時。接著,您可以使用「跳轉」功能,將先前確認的訊息標示為未確認,並強制 Pub/Sub 重新傳送這些訊息。您也可以使用 seek 將未確認的訊息狀態變更為已確認,藉此刪除這些訊息。

搜尋快照時間戳記,即可重播訂閱項目中的訊息。這份指南提供了一些範例,協助您瞭解如何使用 Seek 重播先前確認過的 Pub/Sub 訊息。

事前準備

  1. Set up a Trusted Cloud console project.

    Set up a 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.

  2. Install the Google Cloud CLI.

  3. 設定 gcloud CLI 以使用您的聯合身分。

    詳情請參閱「 使用聯合身分登入 gcloud CLI」。

  4. 如要初始化 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 控制台的訂閱項目詳細資料頁面中建立快照,或尋找現有快照。如需快照命名規則,請參閱「資源名稱」。

    建立快照

    1. 前往 Trusted Cloud 控制台的「Pub/Sub subscriptions」(Pub/Sub 訂閱項目) 頁面。

      前往「訂閱項目」頁面

    2. 從清單中選取訂閱項目。

    3. 按一下 [Create snapshot] (建立快照)。

    4. 輸入快照的 ID,然後按一下「建立」儲存。

    您可以在 Trusted Cloud 控制台的快照頁面查看快照。您也可以在個別主題的詳細資料頁面中管理快照。

    重新播放訂閱內容

    在「Replay messages」(重播訊息) 對話方塊中,您可以跳轉至過去的時間點或已儲存的快照。如要開啟對話方塊,請按照下列步驟操作:

    1. 前往 Trusted Cloud 控制台的「Pub/Sub subscriptions」(Pub/Sub 訂閱項目) 頁面。

      前往「訂閱項目」頁面

    2. 從清單中選取訂閱項目。

    3. 按一下「重播訊息」

    4. 在「Seek」(搜尋) 下方,選取「To a previous time point」(跳轉至過去的時間點) 或「To a snapshot」(跳轉至快照),然後選取要跳轉的時間點或快照。

    5. 按一下「搜尋」即可重播訊息。

    還順利嗎?

    請注意,Pub/Sub 支援頁面提供其他資源及連結。

    後續步驟

    請參閱重播及捨棄訊息