AMQP 中的通道和链接有什么区别?

What is the difference between channels and links in AMQP?

我正在尝试了解 AMQP 协议的框架部分。我知道 AMQP 首先打开一个 TCP 连接,然后在这个连接中使用多个通道来防止设置多个 TCP 连接的开销(这很好解释 here)。 现在我正在努力理解 links 是如何发挥作用的。所以根据我的理解,它的工作原理如下:

  1. 在两个容器(基本上是两个程序)之间建立了一个连接(大部分时间是 TCP)
  2. 创建了多个频道。它们不绑定到任何节点
  3. 一个会话结合了每个方向的两个通道,仍然没有绑定到任何节点
  4. "Links" 将会话绑定到两端的两个节点

我的理解对吗?既然已经有了频道,为什么还需要"Links"这个概念呢?为什么不直接在两个节点之间建立一个通道呢?用简单的英语来说,频道和 link 之间的区别是什么?

Microsoft 状态:

A channel is a unidirectional, outbound, virtual transfer path on top of the connection.

A link is a communication path created over a session that enables transferring messages in one direction

这对我来说基本上是一样的。 如果有人能用简单的术语解释 cannels、session 和 links 之间的关系,我将非常高兴。

长话短说

连接 由连接两个节点的单向通道构成。

Channels因此是可以组成连接的节点之间的单向通信

Session 由两个通道(传入和传出)组成

Link协议是AMQP的核心。 link 提供两个节点之间的单向传输。 link 连接到 末端 的节点。有两种终点:源和目标。终端负责跟踪特定传入或传出消息流的状态。源跟踪传出消息,目标跟踪传入消息。

注意:您可以将终端视为客户端中的套接字,您可以将其关联到精确的功能,例如 source/target.

完整解释

以下所有信息和图像均来自协议 OASIS 高级消息队列协议 (AMQP) 版本 1.0 的规范。有关详细信息,您应该阅读 this.

AMQP 网络由通过 links 连接的节点组成。节点是负责安全存储 and/or 传递消息的命名实体。消息可以源自、终止于节点或由节点中继。

为了在不同容器中的节点之间进行通信,需要建立连接。 AMQP 连接由全双工、可靠排序的帧序列组成。帧是电线上承载的工作单位。

一个AMQP连接被分成协商数量的独立单向通道。一个 AMQP 会话将两个单向通道相关联以形成双向、顺序的对话 两个容器。

单个连接可以同时激活多个独立会话,最多可达协商的通道限制。连接和会话都由每个对等方建模为端点,这些端点存储有关连接或会话的本地和最后已知的远程状态。

为了在节点之间传输消息,需要在节点之间建立link。 link 是两个节点之间的单向路由。 link 附加到终点处的节点。有两种终点:源和目标。终端负责跟踪传入或传出消息的特定流的状态。

Links 提供基于传输的消息数量的基于信用的流量控制方案,允许应用程序控制在给定点从哪些节点接收消息