如需接收发布到某个主题的消息,您必须创建对该主题的订阅。订阅者客户端只能获取创建订阅后发布到该主题的消息。订阅者客户端接收并处理发布到主题的消息。一个主题可以有多个订阅,但一个给定订阅属于单个主题。
借助主题保留功能,附加到某个主题的订阅可以回溯到之前的时间点并重放之前发布的消息。您可以参阅重放和完全清除消息主题,详细了解此功能。
订阅工作流
消息发送至订阅者后,订阅者必须确认消息。
如果消息已发送出去待传送,但订阅者尚未确认,则该消息被称为“未完成”。
Pub/Sub 会重复尝试传送任何尚未确认的消息。不过,Pub/Sub 会尝试不将未处理完的消息传送给同一订阅的任何其他订阅者。
订阅者可配置一段限定的时间(称为
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 检测到订阅者活动或订阅属性更新,则订阅删除时钟会重启。使用订阅到期政策,您可以配置不活动持续时间,或者使订阅成为永久性订阅,而无论其活动情况如何。您也可以手动删除订阅。
尽管您可以创建名称与已删除订阅相同的新订阅,但新订阅与旧订阅没有任何关系。即使已删除的订阅包含许多未确认的消息,使用相同名称创建的新订阅在创建时也不会有积压(也就是没有消息等待传送)。