提问者:小点点

GCP发布/订阅消息发送到创建订阅之前存在的主题


在GCP发布/子文档中,它表示在创建订阅之前发送到主题的消息不会发送到订阅。我想知道,如果您的主题没有绑定订阅,但正在向其发布消息,然后绑定订阅,那么主题中的消息是否会发送到新绑定的订阅?

第二种情况是,具有多个订阅且消息正在流经的主题,但表示新订阅在凌晨1:00绑定到该主题。该订阅是否没有资格接收凌晨1:00之前发送的任何消息?

我所指的文件。https://cloud.google.com/pubsub/docs/subscriber

这就是我特别提到的声明

在创建给定订阅之前发布的消息通常不会针对该订阅传递。因此,发布到没有订阅的主题的消息将不会传递给任何订阅者。


共2个答案

匿名用户

请注意,它没有说“在创建订阅之前发送到主题的消息不会发送到订阅”,而是说“在创建给定订阅之前发布的消息通常不会针对该订阅传递。换句话说,对于以前发布的消息会发生什么,无法保证这种或那种方式。

Cloud Pub/Sub的唯一保证是,成功创建订阅后发布的消息一定会传递给该订阅的订阅者。因此,在第一个场景中,将发送创建订阅后发布的消息,而在可能或不可能之前发布的消息。在第二个场景中,凌晨1点之前发布的消息可能会或可能不会传递给订阅的订阅者。

匿名用户

正如在另一个答案中已经解释的那样,在订阅存在之前发送到主题的消息通常不会传递到订阅。

然而,可以通过将新创建的订阅的积压工作重置到先前的时间点来“强制”执行此操作。假设为主题启用了邮件保留,则时间点必须在主题的保留期内。

我想知道您是否有一个没有订阅绑定但消息正在发布到它的主题,然后绑定了订阅,主题中的消息是否会发送到新绑定的订阅?

假设您有一个主题 topic1,并且为其启用了邮件保留。您可以使用 gcloud pubsub 订阅 seek 命令将较旧的消息(最多 topic1 的保留期)“重播”到(新创建的)订阅 1

gcloud pubsub subscriptions seek test-subscription \
  --time="$(date --date="10 days ago")"

请注意,date 子命令在 macOS 上不起作用,但您可以安装和使用 gdate(brew install gdate)。

本文更详细地介绍了访问新用例的历史主题数据的用例。