跳到主要内容
英文版本为准

本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。

生命周期

PubSubBroker::new 只记录配置,connect 构建客户端,启动时打开每个订阅,关闭时刷出发布者。

Broker 的三个状态作为类型,以及每次转换在 Pub/Sub 上做什么Broker在 Pub/Sub 上PubSubBroker::new(project)ConnectedPubSubBrokerClosed: ()只记录配置,无 I/O为连接构建四个客户端每个订阅:有声明时先创建拓扑,再打开它的流主题第一次发布时启动它的发布者先关闭,再刷出每个主题的发布者connect 之前或 shutdown 之后使用的发布者返回 NotConnected,绝不默默成功
以文字阅读本图
  1. Broker: PubSubBroker::new (project); ConnectedPubSubBroker; Closed: ()
  2. 在 Pub/Sub 上: 只记录配置, 无 I/O; 为连接构建 四个客户端; 每个订阅: 有声明时先 创建拓扑, 再打开它的流; 主题第一次发布时 启动它的发布者; 先关闭,再刷出 每个主题的 发布者
  3. PubSubBroker::new (project) → ConnectedPubSubBroker: connect(self)
  4. ConnectedPubSubBroker → Closed: (): shutdown(self)
  5. 只记录配置, 无 I/O → 为连接构建 四个客户端
  6. 为连接构建 四个客户端 → 每个订阅: 有声明时先 创建拓扑, 再打开它的流
  7. 每个订阅: 有声明时先 创建拓扑, 再打开它的流 → 主题第一次发布时 启动它的发布者
  8. 主题第一次发布时 启动它的发布者 → 先关闭,再刷出 每个主题的 发布者
  9. connect 之前或 shutdown 之后使用的发布者 返回 NotConnected,绝不默默成功

new 不做任何 I/O,所以服务的构建函数保持同步。connect 之前从 Broker 取得的发布者,共用运行时稍后填入的那个连接。

每个订阅在启动时打开一次。先检查它的描述符:名称为空、死信上限不在 5 到 100 之间,或者声明只写了一半,启动都会在调用服务之前失败。带 create_with_topic 的描述符随后创建缺失的主题、死信主题和订阅,创建的订阅启用消息排序。连接 Pub/Sub 时,这需要创建主题和订阅的权限。订阅已经存在、又声明了死信政策时,该政策会写到这个订阅上。然后打开流式拉取。

直接用名称挂载的注册以同样的方式声明它的重试。同一订阅的两个注册如果声明不同,启动就会失败,因为一个订阅只有一个死信政策。

关闭先把连接标为已关闭,然后刷出每个主题的发布者,使分批的消息到达服务。关闭后的状态不包含任何数据。运行时丢弃订阅时,订阅停止:客户端不再读取,但继续延长仍被持有的消息的租约,直到它们结算。