Connection和Channel
本文介绍云消息队列 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长连接,请勿频繁开启或关闭Connection。如果确实需要频繁开启或关闭连接,请使用Channel。单实例开启Connection或Channel的接口限制,请参见使用限制。
Connection数量较少而消费的数据量较大时,可能会出现消费倾斜问题,您可以在保证每个消费者Connection数一致的同时,增加每个消费者的Connection数或增加消费者数量。建议所有消费者的Connection之和大于30。
多个进程可以共享同一个Connection,共享时请不要频繁建立和关闭Connection,否则可能会出现
ChannelNotFind
错误。Producer和Consumer分别使用不同的Connection进行消息发送和消费。