AMQP如何克服直接使用TCP的困难?

use*_*433 6 messaging tcp amqp publish-subscribe rabbitmq

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

hwa*_*ins 6

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

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

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

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


Far*_*yev 5

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

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

在此处输入图片说明

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

资料来源:RabbitMq 在行动