RabbitMQ基础概念之信道channel详解
前言:
最近跟着公司一起做项目重构,也有项目用到了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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java8中LocalDateTime与时间戳timestamp的互相转换
这篇文章主要给大家介绍了关于Java8中LocalDateTime与时间戳timestamp的互相转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03SpringBoot HttpMessageConverter消息转换器的使用详解
在整个数据流转过程中,前端的请求报文转化为Java对象,Java对象转化为响应报文,这里就用到了消息转换器HttpMessageConverter2022-06-06JDK1.8中的ConcurrentHashMap使用及场景分析
这篇文章主要介绍了JDK1.8中的ConcurrentHashMap使用及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01
最新评论