我试图理解RabbitMQ
中频道和连接的概念,我在高级别中理解它,连接是实现为{{1}的实际连接对于代理,频道是使用理智的真实连接进行通信的虚拟连接。因此,通道通过相同的连接进行多路复用。
然而,在低级别如何实现,TCP socket
是非阻塞的?我已经读过使用多个连接不会提高性能为什么不呢?当一个频道使用连接时,我想这些电话是序列化的吗?因此,多个连接不允许我更快地发送和接收数据。
我知道我在这里遗漏了一些东西,这就是我要求澄清的原因。
感谢。
答案 0 :(得分:1)
服务器或客户端是否使用非阻塞套接字是一个实现细节。需要高性能的实现可能使用非阻塞套接字;但是例如RabbitMQ服务器使用通常的轻量级Erlang进程模型来实现并发。
您可以自由使用多个AMQP连接 - 但在大多数情况下,您应该使用一个连接和多个通道。 TCP具有相对较高的开销,并且TCP连接之上的复用信道减少了这种开销。