快速入门:重放消息

本指南举例说明如何重放 Pub/Sub API 消息。

使用 gcloud 命令行界面

使用 gcloud 的最简单方法是在 Cloud Shell 中。 您也可以使用 Cloud SDK 随附的命令行工具。如果您创建具有访问权限范围(包括所有 Cloud API 和默认 Debian 映像)的全新 Compute Engine 机器实例,则会自动满足 Cloud SDK 的安装先决条件。最简单的创建方法是通过 Compute Engine 界面。对于本文档的其余部分,我们将假设您使用的是这些命令行工具之一。

如需详细了解如何使用 gcloud,请参阅 gcloud 快速入门。 另外,如需查看 Pub/Sub gcloud 命令的完整列表,请参阅 gcloud 参考文档中的 gcloud pubsub 部分

创建快照和还原至快照

创建主题和订阅。请使用简短的确认截止期限以提升互动:

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 保留已确认的消息。默认情况下,消息会保留 7 天。您可以使用 message-retention-duration 设置更短的持续时间(但不能短于 10 分钟)。如需了解详情,请参阅重放和舍弃消息中的还原至某一时间戳部分。

只有在您打算还原至时间戳而不是快照时,才需要执行此步骤。

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

现在将订阅回溯还原至某一时间以恢复消息。 请注意,date 命令的 GNU 和 BSD (MacOS) 版本之间的日期算术标志不同:

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 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 秒)后,将不再传送消息。要进行此检查,您可以重复执行 pull 命令,但不确认消息:

gcloud pubsub subscriptions pull seek-demo-sub

使用 Cloud Console

您可以在 Cloud Console 的订阅详细信息页面中创建快照或还原至现有快照。 如需了解快照命名规则,请参阅资源名称

您可以在订阅详细信息页面的菜单栏上找到创建或还原快照的选项。

还原对话框可让您选择还原至某一时间或还原至某一快照:

如需重放消息,请还原至某个快照或某个时间点。

您还可以在单个主题的详细信息页面中管理快照:

对于主题详细信息,您可以在主题详细信息页面上点击快照。

结果怎么样?

请注意,Pub/Sub 支持页面提供了其他资源和链接。

后续步骤

请参阅重放和舍弃消息