AMQP如何克服发送邮件时直接使用TCP的困难?或者更具体地说是在pub / sub场景中?
答案 0 :(得分:4)
在AMQP中有一个代理,该代理接收消息,然后将有关将它们路由到交换和队列的困难部分。您还可以设置持久队列,即使客户端断开连接也可以为客户端保存消息。
你当然可以自己完成所有这些,但要正确完成这项工作需要做大量的工作。特别是RabbitMQ已经在许多部署中进行过战斗测试。
您仍然在AMQP下使用TCP协议,AMQP提供了更高的抽象。
您还必须选择与所有客户端一起使用的有线协议,其中AMQP已经定义了该有线协议。
答案 1 :(得分:1)
通过为所有线程使用一个相同的TCP
连接来提高性能,从而克服了困难。 AMQP
可以通过使用channels
来做到这一点。这些通道是“真实” TCP
连接内部的虚拟连接,并且在您发出AMQP命令的通道上。
随着每个线程旋转,它在现有连接上创建一个通道并获得自己的通道
经纪人的私人沟通途径,不会给您的运营造成任何额外负担
系统的TCP
堆栈。
因此,您可以每秒创建数百次或数千次频道,而操作系统却不会出现异常现象。一个AMQP
连接上可以有多少个TCP
频道没有限制。可以把它想成一束光纤。
原始资料:RabbitMq in Action