7

AMQP如何克服发送消息时直接使用TCP的困难?或者更具体地说是在发布/订阅场景中?

4

2 回答 2

7

在 AMQP 中有一个代理,该代理接收消息,然后执行将它们路由到交换和队列的困难部分。您还可以设置持久队列,即使客户端断开连接,也可以为客户端保存消息。

您当然可以自己完成所有这些工作,但要正确完成这些工作量很大。尤其是 RabbitMQ,已经在许多部署中进行了实战测试。

您仍然在 AMQP 下使用 TCP 协议,AMQP 提供了更高的抽象。

您还必须选择与所有客户端一起使用的有线协议,其中 AMQP 已经定义了该有线协议。

于 2013-02-28T23:27:22.557 回答
6

它通过为所有线程使用一个相同TCP的连接来提高性能来克服困难。AMQP能够通过使用来做到这一点channels。这些通道是“真实”TCP连接中的虚拟连接,它通过通道发出 AMQP 命令。

当每个线程启动时,它会在现有连接上创建一个通道,并获得自己的到代理的私有通信路径,而不会对您的操作系统TCP堆栈产生任何额外负载。

在此处输入图像描述

因此,您可以每秒创建数百或数千次通道,而您的操作系统不会看到任何信号。一个连接AMQP上可以拥有的频道数量没有限制。TCP把它想象成一束光缆。

资料书:RabbitMq in Action

于 2019-08-26T05:46:23.203 回答