订阅概览

如需接收发布到某个主题的消息,您必须创建对该主题的订阅。订阅者客户端只能获取在创建订阅后发布到该主题的消息。订阅者客户端接收并处理发布到主题的消息。一个主题可以有多个订阅,但一个给定订阅属于单个主题。

借助主题保留功能,附加到主题的订阅可以回溯并重放之前发布的消息。如需详细了解此功能,请参阅重放和完全清除消息主题。

订阅工作流

  1. 消息发送至订阅者后,订阅者必须确认消息。

  2. 如果消息已发送出去待传送,但订阅者尚未确认,则该消息称为未完成。

  3. Pub/Sub 会重复尝试传送任何尚未确认的消息。不过,Pub/Sub 会尝试不将未完成的消息传送给同一订阅的任何其他订阅者。

  4. 订阅者可配置一段限定的时间(称为 ackDeadline),用于确认未完成的消息。该时限过后,该消息不再被视为未完成,Pub/Sub 将尝试重新传送该消息。

订阅类型

创建订阅时,您必须指定消息传递类型。 Pub/Sub 提供以下类型的订阅:

  • 拉取订阅使用订阅方客户端向 Pub/Sub 服务器请求消息。

  • 推送订阅使用 Pub/Sub 服务器向订阅者应用发起请求来传送消息。

  • 导出订阅:将消息直接导出到 Google Cloud资源。这些订阅包括:

    • BigQuery 订阅会将数据导出到 BigQuery 表中。

    • Cloud Storage 订阅将数据导出到 Cloud Storage 存储桶。

如需选择适合您业务需求的订阅,请参阅选择订阅类型。您可以在订阅创建后的任何时间更新订阅的消息传送类型

默认订阅属性

默认情况下,Pub/Sub 提供“至少一次”传送,但所有订阅类型均不保证消息顺序。或者,如果消息具有相同的排序键并且位于同一区域,您可以启用消息排序。设置消息排序属性后,Pub/Sub 服务会按照接收消息的顺序来传送带有相同排序键的消息。

Pub/Sub 还支持“正好一次”传送

一般来说,Pub/Sub 会按照消息发布的顺序将每条消息传送一次。但有时可能并不按顺序传送消息,或者会将消息传送多次。即使在针对某条消息的确认请求成功返回后,Pub/Sub 也可能会重新传送该消息。这种重新传送可能是由服务器端重启或客户端问题等原因造成的。因此,虽然很少见,但任何消息都可能随时重新传送。

如果要实施多次传送,订阅者需要在处理消息时遵循幂等原则

订阅到期

默认情况下,订阅在订阅者 31 天无活动后或在订阅未进行任何更新的情况下即会到期。订阅者活动包括打开连接、主动拉取或成功推送等。如果 Pub/Sub 检测到订阅者活动或订阅属性更新,则订阅删除时钟会重启。使用订阅到期政策,您可以配置不活动持续时间,或者使订阅成为永久性订阅,而无论其活动情况如何。您也可以手动删除订阅。

尽管您可以创建名称与已删除订阅相同的新订阅,但新订阅与旧订阅没有任何关系。即使已删除的订阅包含大量未确认的消息,新的同名订阅在创建时也不会有积压(也就是没有消息等待传送)。

后续步骤