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

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

连接

AMQP 1.0 用一个连接把两个容器连在一起,连接承载会话,每个会话承载单向传送消息的链路。

服务与 Broker 之间的一个连接:发布者一个会话,每个订阅一个会话,链路位于会话之内一个 TCP 连接会话:publish会话:ordersBroker 容器服务容器容器 id ruststream会话窗口由发布者共用发送链路目标 receipts每个地址一条会话窗口属于一个订阅接收链路源 orders信用 256节点 receipts队列或主题节点 orders队列或主题链路名称在一个连接内唯一;本 crate 由容器 id派生链路名称,例如 ruststream-receiver-3
以文字阅读本图
  1. 一个 TCP 连接: 会话窗口 由发布者共用; 发送链路 目标 receipts 每个地址一条; 会话窗口 属于一个订阅; 接收链路 源 orders 信用 256
  2. 会话:publish: 会话窗口 由发布者共用; 发送链路 目标 receipts 每个地址一条
  3. 会话:orders: 会话窗口 属于一个订阅; 接收链路 源 orders 信用 256
  4. Broker 容器: 节点 receipts 队列或主题; 节点 orders 队列或主题
  5. 服务容器 容器 id ruststream → 一个 TCP 连接: TLS、SASL、open
  6. 发送链路 目标 receipts 每个地址一条 → 节点 receipts 队列或主题: transfer
  7. 节点 orders 队列或主题 → 接收链路 源 orders 信用 256: transfer
  8. 链路名称在一个连接内唯一;本 crate 由容器 id 派生链路名称,例如 ruststream-receiver-3

容器是协议中的一个对等方:服务是一个容器,Broker 是另一个。服务出示的容器 id 是 ruststream,除非 container_id 指定了别的 id。Broker 的控制台在这个 id 下列出服务的连接和链路。

连接就是一个 TCP 套接字。URL 为 amqps:// 时,连接从 TLS 开始。随后 SASL 用 PLAIN、ANONYMOUS 或 EXTERNAL 对服务进行认证,两个容器交换 open。

会话是连接内的一对通道,每个通道都有一个窗口,限制其上正在传输的 transfer 数量。本 crate 开启一个由连接上所有发布者共用的会话,并为每个订阅再开启一个。慢的订阅只会填满自己的窗口,绝不会填满发布者的窗口或其他订阅的窗口。

链路有名称,并在一个方向上传送消息。发送链路从服务通往一个节点,接收链路从一个节点通往服务。链路的每一端都是一个 terminus,Broker 一侧的 terminus 用地址指明一个节点。链路还有自己的信用,Transfer 一页用图说明了这一点。

标准规定的是线路上的帧,而不是地址的含义。orders 是队列还是主题,由 Broker 决定,地址一页用图说明了这一点。

这一模型就是规范自己的模型(传输、安全)。