AMQP如何克服发送消息时直接使用TCP的困难?或者更具体地说是在发布/订阅场景中?
问问题
3761 次
2 回答
7
在 AMQP 中有一个代理,该代理接收消息,然后执行将它们路由到交换和队列的困难部分。您还可以设置持久队列,即使客户端断开连接,也可以为客户端保存消息。
您当然可以自己完成所有这些工作,但要正确完成这些工作量很大。尤其是 RabbitMQ,已经在许多部署中进行了实战测试。
您仍然在 AMQP 下使用 TCP 协议,AMQP 提供了更高的抽象。
您还必须选择与所有客户端一起使用的有线协议,其中 AMQP 已经定义了该有线协议。
于 2013-02-28T23:27:22.557 回答
6
它通过为所有线程使用一个相同TCP
的连接来提高性能来克服困难。AMQP
能够通过使用来做到这一点channels
。这些通道是“真实”TCP
连接中的虚拟连接,它通过通道发出 AMQP 命令。
当每个线程启动时,它会在现有连接上创建一个通道,并获得自己的到代理的私有通信路径,而不会对您的操作系统TCP
堆栈产生任何额外负载。
因此,您可以每秒创建数百或数千次通道,而您的操作系统不会看到任何信号。一个连接AMQP
上可以拥有的频道数量没有限制。TCP
把它想象成一束光缆。
于 2019-08-26T05:46:23.203 回答