连接和通道
更新时间:2024-03-07 19:06:53
PDF
每个连接使用大约 100kb 的 RAM(如果使用 TLS,甚至更多)。数千个连接可能是 RabbitMQ 服务器的沉重负担。在最坏的情况下,服务器可能由于内存不足而崩溃。AMQP 协议有一种称为“多路复用”的机制,它“复用”单个 TCP 连接。它建议每个进程只创建一个 TCP 连接,并在这个唯一一个连接的基础上为不同的线程使用多个通道。连接也应该是长连接的。AMQP 连接的握手过程非常复杂,至少需要 7 个 TCP 数据包(如果使用了 TLS,则需要更多)。 相反,如果需要,可以更频繁地打开和关闭通道。如果可能的话,甚至通道也应该是长寿命的,例如,在每个发布信息线程中复用相同的通道。每次发布信息时不用打开频道。最佳实践是复用连接,使用各通道在一个连接的基础上实现多路复用。理想情况下,每个进程只能有一个连接,然后在应用程序中为每个线程使用一个通道,而每个 channel 复用同一个连接即可。
不要在线程之间共享通道(channels)
您还应该确保不在线程之间共享通道,因为大多数客户机不保证通道是线程安全的(因为这样会对性能产生严重的负面影响)。
为发布者和消费者区分连接(connections )
为发布者和消费者区分连接以获得高吞吐量。当发布服务器向服务器发送太多要处理的消息时,RabbitMQ 可以对 TCP 连接施加反向压力。如果消费者使用相同的 TCP 连接,服务器可能不会从客户机接收消息确认。因此,消费性能也会受到影响。而随着消费速度的降低,服务器将不堪重负。
大量的连接和通道可能会影响 RabbitMQ 管理接口的性能
对于每个连接和通道性能,必须收集、分析和显示度量指标。