RabbitMQ基础概念之信道channel详解

 更新时间:2023年08月28日 09:43:29   作者:pmdream  
这篇文章主要介绍了RabbitMQ基础概念之信道channel详解,信道是生产消费者与rabbit通信的渠道,生产者publish或者消费者消费一个队列都是需要通过信道来通信的,需要的朋友可以参考下

前言:

最近跟着公司一起做项目重构,也有项目用到了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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java的Spring AOP详细讲解

    Java的Spring AOP详细讲解

    章主要为大家详细介绍了Java的Spring AOP,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Java中图片的常用操作代码总结

    Java中图片的常用操作代码总结

    这篇文章主要为大家详细介绍了Java中对图片进行常用操作处理的代码,例如生成自定义图片、获取图片格式、图片的裁剪与压缩等,感兴趣的小伙伴可以了解一下
    2022-11-11
  • Java使用SFTP上传文件到服务器的简单使用

    Java使用SFTP上传文件到服务器的简单使用

    这篇文章主要介绍了Java使用SFTP上传文件到服务器的简单使用,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Java8中LocalDateTime与时间戳timestamp的互相转换

    Java8中LocalDateTime与时间戳timestamp的互相转换

    这篇文章主要给大家介绍了关于Java8中LocalDateTime与时间戳timestamp的互相转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java Swing中JDialog实现用户登陆UI示例

    Java Swing中JDialog实现用户登陆UI示例

    这篇文章主要介绍了Java Swing中JDialog实现用户登陆UI功能,结合完整实例形式分析了Swing使用JDialog实现用户登陆UI界面窗口功能的步骤与相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • SpringBoot HttpMessageConverter消息转换器的使用详解

    SpringBoot HttpMessageConverter消息转换器的使用详解

    在整个数据流转过程中,前端的请求报文转化为Java对象,Java对象转化为响应报文,这里就用到了消息转换器HttpMessageConverter
    2022-06-06
  • Log4j新手快速入门教程

    Log4j新手快速入门教程

    这篇文章主要给大家介绍了关于Log4j新手入门的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Log4j具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • 一文搞懂JAVA 枚举(enum)

    一文搞懂JAVA 枚举(enum)

    这篇文章主要介绍了JAVA 枚举(enum)的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • JDK1.8中的ConcurrentHashMap使用及场景分析

    JDK1.8中的ConcurrentHashMap使用及场景分析

    这篇文章主要介绍了JDK1.8中的ConcurrentHashMap使用及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 详解Spring Bean的循环依赖解决方案

    详解Spring Bean的循环依赖解决方案

    这篇文章主要介绍了详解Spring Bean的循环依赖解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01

最新评论