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