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

时间:2013-02-28 23:18:26

标签: tcp rabbitmq messaging publish-subscribe amqp

AMQP如何克服发送邮件时直接使用TCP的困难?或者更具体地说是在pub / sub场景中?

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

通过为所有线程使用一个相同的TCP连接来提高性能,从而克服了困难。 AMQP可以通过使用channels来做到这一点。这些通道是“真实” TCP连接内部的虚拟连接,并且在您发出AMQP命令的通道上。

随着每个线程旋转,它在现有连接上创建一个通道并获得自己的通道 经纪人的私人沟通途径,不会给您的运营造成任何额外负担 系统的TCP堆栈。

enter image description here

因此,您可以每秒创建数百次或数千次频道,而操作系统却不会出现异常现象。一个AMQP连接上可以有多少个TCP频道没有限制。可以把它想成一束光纤。

原始资料:RabbitMq in Action