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 单例模式(懒汉式与饿汉式)

    java 单例模式(懒汉式与饿汉式)

    这篇文章主要介绍了java 单例模式的相关资料,这里对懒汉式与饿汉式都做了实例介绍,需要的朋友可以参考下
    2017-07-07
  • MAC配置java+jmeter环境变量过程解析

    MAC配置java+jmeter环境变量过程解析

    这篇文章主要介绍了MAC配置java+jmeter环境变量过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java经典算法汇总之冒泡排序

    Java经典算法汇总之冒泡排序

    冒泡排序基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
    2016-04-04
  • SpringBoot 实现CAS Server统一登录认证的详细步骤

    SpringBoot 实现CAS Server统一登录认证的详细步骤

    ​ CAS(Central Authentication Service)中心授权服务,是一个开源项目,目的在于为Web应用系统提供一种可靠的单点登录,这篇文章主要介绍了SpringBoot 实现CAS Server统一登录认证,需要的朋友可以参考下
    2024-02-02
  • Java复合语句的使用方法详解

    Java复合语句的使用方法详解

    这篇文章主要介绍了Java编程中复合语句,结合相关的具体实例介绍了其用法,需要的朋友可以参考下
    2017-09-09
  • Java线程等待用法实例分析

    Java线程等待用法实例分析

    这篇文章主要介绍了Java线程等待用法,结合实例形式分析了obj.wait()实现线程等待相关原理与操作技巧,需要的朋友可以参考下
    2018-09-09
  • MyBatis中执行相关SQL语句的方法

    MyBatis中执行相关SQL语句的方法

    本文主要介绍了MyBatis中执行相关SQL语句的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Spring Retry实现重试机制的示例详解

    Spring Retry实现重试机制的示例详解

    这篇文章主要为大家详细介绍了Spring-Retry的用法以及实现原理是怎么样的,文中的示例代码讲解详细,具有一定的参考价值,需要的可以了解一下
    2023-07-07
  • RocketMQ发送事务消息详解

    RocketMQ发送事务消息详解

    这篇文章主要介绍了RocketMQ发送事务消息详解,RocketMQ分布式事务消息不仅可以实现应用之间的解耦,又能保证数据的最终一致性,传统的大事务可以被拆分为小事务,不仅能提升效率,还不会因为某一个关联应用的不可用导致整体回滚,需要的朋友可以参考下
    2023-09-09
  • 使用Spring Boot集成FastDFS的示例代码

    使用Spring Boot集成FastDFS的示例代码

    本篇文章主要介绍了使用Spring Boot集成FastDFS的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02

最新评论