我正在尝试理解 AMQP 协议(protocol)的框架部分。我知道 AMQP 首先打开一个 TCP 连接,然后在这个连接中使用多个 channel 来防止设置多个 TCP 连接的开销(这很好地解释了 here )。 现在我正在努力理解链接是如何发挥作用的。所以根据我的理解,它的工作原理如下:
- 在两个容器(基本上是两个程序)之间建立连接(大多数情况下是 TCP)
- 创建了多个 channel 。它们不绑定(bind)到任何节点
- 一个 session 结合了每个方向的两个 channel ,仍然没有绑定(bind)到任何节点
- “链接”将 session 绑定(bind)到两端的两个节点
我的理解对吗?既然已经有了 channel ,为什么还需要“链接”的概念呢?为什么不直接在两个节点之间建立一个 channel 呢?用简单的英语来说, channel 和链接之间的区别是什么?
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
这对我来说基本上是一样的。 如果有人能用简单的术语解释 channel 、 session 和链接之间的关系,我将非常高兴。
最佳答案
长话短说
连接 由连接两个节点的单向 channel 组成。
channel 因此是可以构成连接的节点之间的单向通信
session 由两个 channel (传入和传出)组成
Link协议(protocol)是AMQP的核心。链路提供两个节点之间的单向传输。链接在终点 连接到节点。有两种终点:源和目标。终端负责跟踪特定传入或传出消息流的状态。源跟踪传出消息,目标跟踪传入消息。
注意:您可以将终端视为客户端中的套接字,您可以将其关联到精确的功能,例如源/目标。
完整解释
以下所有信息和图像均来自协议(protocol) OASIS 高级消息队列协议(protocol) (AMQP) 版本 1.0 的规范。有关更多信息,您应该阅读 this .
AMQP 网络由通过链接连接的节点组成。节点是负责安全存储和/或传递消息的命名实体。消息可以源自节点、终止于节点或由节点中继。
为了在不同容器中的节点之间进行通信,需要建立连接。 AMQP 连接由全双工、可靠排序的帧序列组成。帧是在线路上承载的工作单元。
AMQP 连接被划分为协商数量的独立单向 channel 。一个 AMQP session 将两个单向 channel 相关联以形成双向、顺序的对话 两个容器。
单个连接可能有多个独立的 session 同时处于 Activity 状态,直到协商的 channel 限制。连接和 session 都由每个对等方建模为端点,这些端点存储有关连接或 session 的本地和最后已知的远程状态。
为了在节点之间传输消息,需要在节点之间建立链接。链路是两个节点之间的单向路由。链接在终点附加到节点。有两种终点:源和目标。终端负责跟踪传入或传出消息的特定流的状态。
链接根据传输的消息数量提供基于信用的流量控制方案,允许应用程序控制在给定点从哪些节点接收消息
关于java - AMQP 中的 channel 和链接有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60395765/