英文版本为准
本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。
连接
AMQP 1.0 用一个连接把两个容器连在一起,连接承载会话,每个会话承载单向传送消息的链路。
以文字阅读本图
- 一个 TCP 连接: 会话窗口 由发布者共用; 发送链路 目标 receipts 每个地址一条; 会话窗口 属于一个订阅; 接收链路 源 orders 信用 256
- 会话:publish: 会话窗口 由发布者共用; 发送链路 目标 receipts 每个地址一条
- 会话:orders: 会话窗口 属于一个订阅; 接收链路 源 orders 信用 256
- Broker 容器: 节点 receipts 队列或主题; 节点 orders 队列或主题
- 服务容器 容器 id ruststream → 一个 TCP 连接: TLS、SASL、open
- 发送链路 目标 receipts 每个地址一条 → 节点 receipts 队列或主题: transfer
- 节点 orders 队列或主题 → 接收链路 源 orders 信用 256: transfer
- 链路名称在一个连接内唯一;本 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 决定,地址一页用图说明了这一点。