快速入門導覽課程:重播訊息

這份指南提供了一些範例,協助您瞭解如何重播 Cloud Pub/Sub API 訊息。

使用 gcloud 指令列介面

如果您要使用 gcloud,透過 Cloud Shell 來輸入指令是最簡單的方式,另外也可以使用 Cloud SDK 隨附的指令列工具。如果您是建立全新的 Compute Engine 機器執行個體,且其存取權範圍涵蓋所有 Cloud API 和預設 Debian 映像檔,則表示您已滿足 Cloud SDK 所需的各項設定條件。如要建立這類執行個體,最簡單的方式是利用 Compute Engine UI。在本文件的其餘說明中,我們會假設您是使用上述其中一種指令列工具。

如要進一步瞭解如何使用 gcloud,請參閱 gcloud 快速入門。另請參閱 gcloud 參考資料中的 gcloud pubsub 區段,查看 Cloud Pub/Sub gcloud 指令的完整清單。

建立及搜尋快照

建立主題和訂閱項目。為了讓互動更加順利,請縮短確認期限:

alias pubsub='gcloud beta pubsub'
pubsub topics create seek-demo-topic
pubsub subscriptions create seek-demo-sub --topic=seek-demo-topic --ack-deadline=10

系統目前尚未在訂閱項目中確認任何訊息,請建立快照以擷取這個狀態:

pubsub snapshots create my-snapshot --subscription=seek-demo-sub
pubsub snapshots list

您現在可以發佈、提取及確認訊息:

pubsub topics publish seek-demo-topic --message 'hello, world'
pubsub subscriptions pull --auto-ack seek-demo-sub

請注意,後續的提取程序不會產生任何新訊息 (可能會暫時產生一些重複訊息):

pubsub subscriptions pull --auto-ack seek-demo-sub

您可以搜尋快照的訂閱項目,藉此復原訊息。請注意,訊息可能不會立即傳送:Pub/Sub 在傳送訊息時並沒有確切保證的延遲時間,不過可以確定的是,保留在快照中的訊息最終至少會傳送一次:

pubsub subscriptions seek seek-demo-sub --snapshot=my-snapshot
pubsub subscriptions pull seek-demo-sub --auto-ack

請注意,只要訂閱項目的主題與快照主題相同,您也可以搜尋同一份快照的其他訂閱項目:

pubsub subscriptions create seek-demo-sub2 --topic=seek-demo-topic --ack-deadline=10
pubsub subscriptions seek seek-demo-sub2 --snapshot=my-snapshot

seek-demo-sub2 提取內容的程序現在會產生您於建立 seek-demo-sub2 前發佈的訊息:

pubsub subscriptions pull seek-demo-sub2 --auto-ack

完成快照的相關操作後,請進行清理:

pubsub snapshots delete my-snapshot

搜尋時間戳記

您也可以搜尋時間戳記,藉此重播已確認的訊息。如要搜尋時間戳記,您必須先使用 retain-acked-messages 設定訂閱項目,保留已確認的訊息。根據預設,系統會將訊息保留 7 天,您可以使用 message-retention-duration 縮短保留時間 (下限為 10 分鐘)。詳情請參閱重播與捨棄訊息一文說明的訂閱項目設定。

以下這個步驟不適用於搜尋快照,只有在您打算搜尋時間戳記的情況下才需執行。

pubsub subscriptions update seek-demo-sub --retain-acked-messages

您現在可以發佈、提取及確認訊息:

pubsub topics publish seek-demo-topic --message 'hello, world'
pubsub subscriptions pull --auto-ack seek-demo-sub

下一個提取程序應該不會傳回任何訊息:

pubsub subscriptions pull seek-demo-sub

接著,請搜尋過去的訂閱項目,藉此復原訊息。請注意,取決於日期指令的版本是屬於 GNU 或 BSD (MacOS),日期算術標記會有所不同:

TS_FORMAT=%Y-%m-%dT%H:%M:%SZ
pubsub subscriptions seek seek-demo-sub --time=$(date -u -d '-10 min' +$TS_FORMAT)

後續的提取程序應該會再次產生訊息:

pubsub subscriptions pull --auto-ack seek-demo-sub

透過搜尋功能,您也可以選擇不傳送在特定時間點 (例如目前時間) 以前發佈的所有訊息,方法是搜尋當前時間的訂閱項目,並將之前的所有訊息標示為已確認:

pubsub topics publish seek-demo-topic --message 'hello, world'
pubsub subscriptions seek seek-demo-sub --time=$(date -u +$TS_FORMAT)

經過一些傳播延遲時間 (大約 60 秒) 後,系統就不會再傳送訊息。如需確認,您可以重複執行不會確認訊息的提取指令:

pubsub subscriptions pull seek-demo-sub

使用 Cloud Console

Cloud Console 的訂閱項目詳細資料頁面上,您可以建立快照或搜尋現有快照。如需瞭解快照命名規則,請參閱資源名稱一節。

在搜尋對話方塊中,您可以針對時間點或快照搜尋訂閱項目:

您也可以在個別主題的詳細資料頁面中管理快照:

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

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

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