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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot项目如何添加2FA双因素身份认证

    SpringBoot项目如何添加2FA双因素身份认证

    双因素身份验证2FA是一种安全系统,要求用户提供两种不同的身份验证方式才能访问某个系统或服务,国内普遍做短信验证码这种的用的比较少,不过在国外的网站中使用双因素身份验证的还是很多的,这篇文章主要介绍了SpringBoot项目如何添加2FA双因素身份认证,需要的朋友参考下
    2024-04-04
  • Java多线程实现阻塞队列的示例代码

    Java多线程实现阻塞队列的示例代码

    本文主要介绍了Java多线程实现阻塞队列的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • java面向对象的六原则一法则小结

    java面向对象的六原则一法则小结

    本篇文章主要对java面向对象的六原则一法则进行简要说明,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 详解Java泛型中类型擦除问题的解决方法

    详解Java泛型中类型擦除问题的解决方法

    Java泛型的实现是不完整的,有时会遇到一些Java泛型类型擦除的问题。本文将详细为大家讲解Java泛型中类型擦除问题的解决方法,需要的可以参考一下
    2022-05-05
  • spring boot切面execution表达式添加多个包路径问题及解决方案

    spring boot切面execution表达式添加多个包路径问题及解决方案

    在Spring Boot中,如果你想为多个包中的方法创建一个切面,你可以在@Pointcut注解中使用||操作符来指定多个包,下面给大家分享spring boot切面execution表达式添加多个包路径问题及解决方案,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Mybatis中通过generator生成mapper、Dao、mapper.xml的方法

    Mybatis中通过generator生成mapper、Dao、mapper.xml的方法

    这篇文章主要介绍了Mybatis中通过generator生成mapper、Dao、mapper.xml的方法,需要的朋友可以参考下
    2017-01-01
  • SpringBoot多环境开发与日志小结

    SpringBoot多环境开发与日志小结

    这篇文章主要介绍了SpringBoot多环境开发与日志,下面给大家说一下如何基于多环境开发做配置独立管理,务必掌握,需要的朋友可以参考下
    2022-08-08
  • SpringCloud Gateway实现限流功能详解

    SpringCloud Gateway实现限流功能详解

    SpringCloud Gateway 是 Spring Cloud 的一个全新项目,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。这篇文章主要介绍了SpringCloud Gateway实现限流,需要的朋友可以参考下
    2022-11-11
  • java中关于深拷贝的几种方式总结

    java中关于深拷贝的几种方式总结

    这篇文章主要介绍了java中关于深拷贝的几种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java实现加盐算法的两种方法

    Java实现加盐算法的两种方法

    数据安全是一个重要的问题,本文主要介绍了Java实现加盐算法的两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02

最新评论