RabbitMQ基础概念之信道channel详解
作者:pmdream
前言:
最近跟着公司一起做项目重构,也有项目用到了MQ。
其中用到了死信队列和延迟队列。
先整理一下路由的基础知识,不能只跟着实战,堆代码。
1.channel信道
信道是生产消费者与rabbit通信的渠道,生产者publish或者消费者消费一个队列都是需要通过信道来通信的。
信道是建立在TCP上面的虚拟链接,也就是rabbitMQ在一个TCP上面建立成百上千的信道来达到多个线程处理。
注意是一个TCP 被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID,保证了信道的私有性,对应上唯一的线程使用。
1.1 为什么RabbitMQ 需要信道,如果直接进行TCP通信呢?
上述的描述其实已经很明显了,因为TCP可以被多个线程共享,显然线程比TCP要省事的多。
TCP的创建开销很大,创建需要三次握手,销毁需要四次握手。
如果不使用信道,那么引用程序就会使用TCP方式进行连接到RabbitMQ,因为MQ可能每秒会进行成千上万的链接,
总之就是TCP消耗资源
TCP链接可以容纳无限的信道,不会有并发上面的性能瓶颈。
在代码中并不会有直观的能看到信道这个概念。
因为代码中都是用自动配置。
@Autowired RabbitTemplate rabbitTemplate;
或者使用
@Autowired private AmqpTemplate template;
都是自动隐藏了详细的建立连接过程。
但是在使用rabbitmq时不管是消费还是生产都需要创建信道(channel) 和connection(连接)。
连接是连接到RabbitMQ的服务器~
1.2 连接到RabbitMQ的示意图
看这个示意图的话,我们好像可以直接使用Connection就可以完成信道的工作。
但是因为建立连接会很耗费性能,这也是有点类似于工厂模式那种吧~用类似nio的做法,连接tcp连接复用
当每个信道的流量不是很大时,复用。
但是当流量很大的时候,多个信道用一个connection就会出现性能的瓶颈。
所以使用多个connection也是合理的,这样信道可以平摊到每个connection中。
具体调节方式需要在业务中进行体验。
关键点在于复用TCP连接
到此这篇关于RabbitMQ基础概念之信道channel详解的文章就介绍到这了,更多相关RabbitMQ信道channel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!