英文版本为准
本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。
生命周期
PulsarBroker::new 只记录配置,connect 构建客户端,启动时为每个订阅打开一个消费者,关闭时关闭生产者。
以文字阅读本图
- Broker: PulsarBroker::new (url); ConnectedPulsarBroker; Closed: ()
- 在 Pulsar 上: 只记录配置, 无 I/O; 构建客户端: URL、令牌、重试; 每个订阅: 一个消费者及 其驱动任务; 第一次向主题 发布时打开 它的生产者; 标为已关闭, 关闭生产者
- PulsarBroker::new (url) → ConnectedPulsarBroker: connect(self)
- ConnectedPulsarBroker → Closed: (): shutdown(self)
- 只记录配置, 无 I/O → 构建客户端: URL、令牌、重试
- 构建客户端: URL、令牌、重试 → 每个订阅: 一个消费者及 其驱动任务
- 每个订阅: 一个消费者及 其驱动任务 → 第一次向主题 发布时打开 它的生产者
- 第一次向主题 发布时打开 它的生产者 → 标为已关闭, 关闭生产者
- 比连接活得更久的发布者或定位 返回 PulsarError::NotConnected,绝不默默成功
new 不做任何 I/O,所以服务的构建函数保持同步。运行时在应用启动时连接 Broker。connect 用 URL、令牌和操作重试构建客户端。客户端构建失败时,启动以 PulsarError::Connect 失败。在 Broker 连接之前从它取得的发布者,在连接建立后共用这个连接。
每个订阅的描述符先经过检查:订阅名、合法的主题名或合法的模式,以及 Pulsar 能够执行的重试声明。随后,客户端消费者在 Broker 建立连接的那个运行时上打开,旁边启动一个驱动任务。服务器拒绝时,启动以 PulsarError::Subscribe 失败,错误中给出主题名。
只消费的服务不打开任何生产者。第一次向某个主题发布时,才打开该主题的生产者。
关闭先把连接标为已关闭,然后关闭每个生产者。客户端本身没有关闭操作,所以已关闭状态不携带任何内容。订阅被丢弃时,它的驱动任务停止。驱动任务会继续结算,直到它交出的每个投递都已结算或被丢弃,然后关闭消费者。