本文介绍消息队列RabbitMQ版中Connection和Channel的概念及其使用建议。
Connection
Connection是物理TCP连接。Connection将应用与消息队列RabbitMQ版连接在一起。Connection会执行认证、IP解析、路由等底层网络任务。应用与消息队列RabbitMQ版完成Connection建立大约需要15个TCP报文交互,因而会消耗大量的网络资源和消息队列RabbitMQ版资源。大量的Connection会对消息队列RabbitMQ版造成巨大压力,甚至触发消息队列RabbitMQ版SYN洪水攻击防护,导致消息队列RabbitMQ版无响应,进而影响您的业务。

Channel
Channel是物理TCP连接中的虚拟连接。当应用通过Connection与消息队列RabbitMQ版建立连接后,所有的AMQP协议操作(例如创建队列、发送消息、接收消息等)都会通过Connection中的Channel完成。Channel可以复用Connection,即一个Connection下可以建立多个Channel。Channel不能脱离Connection独立存在,而必须存活在Connection中。当某个Connection断开时,该Connection下的所有Channel都会断开。当大量应用需要与消息队列RabbitMQ版建立多个连接时,建议您使用Channel来复用Connection,从而减少网络资源和消息队列RabbitMQ版资源消耗。

使用建议
Connection和Channel的使用建议如下:
- 保持Connection长连接,请勿频繁开启或关闭Connection。如果确实需要频繁开启或关闭连接,请使用Channel。单实例开启Connection或Channel的接口限制,请参见使用限制。
- 一个进程对应一个Connection,一个进程中的多个线程则分别对应一个Connection中的多个Channel。
- Producer和Consumer分别使用不同的Connection进行消息发送和消费。