订阅概览

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

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

订阅工作流程

  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 会按照消息的发布顺序传送每条消息一次。但是,有时可能会不按顺序传送消息,或者传送多次消息。即使在成功返回消息的确认请求后,Pub/Sub 也可能会重新提交该消息。这种重新传送可能是由服务器端重启或客户端问题等问题引起的。因此,尽管很罕见,但任何消息都可以随时重新传送。

若要进行多次传送,您的订阅者在处理消息时必须具有幂等性

订阅到期

默认情况下,订阅将在订阅者处于非活跃状态 31 天后或如果订阅未更新的情况下过期。订阅者活动的示例包括打开连接、主动拉取或成功推送。如果 Pub/Sub 检测到订阅者活动或订阅属性更新,订阅删除时钟会重启。使用订阅到期政策,您可以配置非活动时长,或使订阅成为永久性订阅,而无论活动如何。您也可以手动删除订阅。

虽然您可以创建与已删除订阅同名的新订阅,但新订阅与旧订阅没有任何关系。即使已删除的订阅有许多未确认的消息,使用相同名称创建的新订阅在创建时也不会有积压(没有消息等待传送)。

后续步骤