RabbitMQ中的Connection和Channel信道详解

 更新时间:2023年08月28日 10:29:38   作者:LiZhen798  
这篇文章主要介绍了RabbitMQ中的Connection和Channel信道详解,信道是建立在 Connection 之上的虚拟连接,RabbitMQ 处理的每条 AMQP 指令都是通过信道完成的,需要的朋友可以参考下

RabbitMQ的Connection和Channel

我们知道无论是生产者还是消费者,都需要和 RabbitMQ Broker 建立连接,这个连接就是一条 TCP 连接,也就是 Connection。

一旦 TCP 连接建立起来,客户端紧接着可以创建一个 AMQP 信道(Channel),每个信道都会被指派一个唯一的 ID。

信道是建立在 Connection 之上的虚拟连接,RabbitMQ 处理的每条 AMQP 指令都是通过信道完成的。

我们完全可以使用 Connection 就能完成信道的工作,为什么还要引入信道呢?

试想这样一个场景,一个应用程序中有很多个线程需要从 RabbitMQ 中消费消息,或者生产消息,那么必然需要建立很多个 Connection,也就是多个 TCP 连接。

然而对于操作系统而言,建立和销毁 TCP 连接是非常昂贵的开销,如果遇到使用高峰,性能瓶颈也随之显现。

RabbitMQ 采用类似 NIO(Non-blocking I/O)的做法,选择 TCP 连接复用,不仅可以减少性能开销,同时也便于管理。

每个线程把持一个信道,所以信道复用了 Connection 的 TCP 连接。

同时 RabbitMQ 可以确保每个线程的私密性,就像拥有独立的连接一样。当每个信道的流量不是很大时,复用单一的 Connection 可以在产生性能瓶颈的情况下有效地节省 TCP 连接资源。

但是信道本身的流量很大时,这时候多个信道复用一个 Connection 就会产生性能瓶颈,进而使整体的流量被限制了。

此时就需要开辟多个 Connection,将这些信道均摊到这些 Connection 中,至于这些相关的调优策略需要根据业务自身的实际情况进行调节。

信道在 AMQP 中是一个很重要的概念,大多数操作都是在信道这个层面展开的。

比如 channel.exchangeDeclare、channel.queueDeclare、channel.basicPublish、channel.basicConsume 等方法。

RabbitMQ 相关的 API 与 AMQP 紧密相连,比如 channel.basicPublish 对应 AMQP 的 Basic.Publish 命令。

名词解释:

NIO,也称非阻塞 I/O,包含三大核心部分:Channel(信道)、Buffer(缓冲区)和 Selector(选择器)。

NIO 基于 Channel 和 Buffer 进行操作,数据总是从信道读取数据到缓冲区中,或者从缓冲区写入到信道中。

Selector 用于监听多个信道的时间(比如连接打开,数据到达等)。因此,单线程可以监听多个数据的信道。

到此这篇关于RabbitMQ中的Connection和Channel信道详解的文章就介绍到这了,更多相关RabbitMQ的Connection和Channel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中Class类的作用与深入理解

    Java中Class类的作用与深入理解

    这篇文章主要介绍了Java中Class类的作用与深入理解的相关资料,希望通过本文能帮助到大家让大家理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • 基于JavaMail的Java实现复杂邮件发送功能

    基于JavaMail的Java实现复杂邮件发送功能

    这篇文章主要为大家详细介绍了基于JavaMail的Java实现复杂邮件发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Spring Cloud Alibaba Nacos Config进阶使用

    Spring Cloud Alibaba Nacos Config进阶使用

    这篇文章主要介绍了Spring Cloud Alibaba Nacos Config进阶使用,文中使用企业案例,图文并茂的展示了Nacos Config的使用,感兴趣的小伙伴可以看一看
    2021-08-08
  • feignclient https 接口调用报证书错误的解决方案

    feignclient https 接口调用报证书错误的解决方案

    这篇文章主要介绍了feignclient https 接口调用报证书错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java pdf文件书签承前缩放验证的设置方法

    Java pdf文件书签承前缩放验证的设置方法

    很多朋友不知道是什么是书签承前缩放,简单说就是可以任意改变当前pdf文档缩放比例,点击书签后不影响其缩放比率,本文给大家介绍下Java pdf文件书签承前缩放验证的设置方法,感兴趣的朋友一起看看吧
    2022-02-02
  • Maven导入依赖时报错如何解决

    Maven导入依赖时报错如何解决

    这篇文章主要介绍了Maven导入依赖时报错如何解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • ssm项目实现用户登陆持久化(token)

    ssm项目实现用户登陆持久化(token)

    这篇文章主要介绍了ssm项目实现用户登陆持久化(token),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java Buffer缓冲区(NIO)

    Java Buffer缓冲区(NIO)

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。本系列教程将有助于你学习和理解Java NIO。
    2021-09-09
  • Java结合Swing实现龙年祝福语生成工具

    Java结合Swing实现龙年祝福语生成工具

    Swing是一个为Java设计的GUI工具包,属于Java基础类的一部分,本文将使用Java和Swing实现龙年祝福语生成工具,感兴趣的小伙伴可以了解下
    2024-01-01
  • springboot中server.ssl.key-store配置路径的问题小结

    springboot中server.ssl.key-store配置路径的问题小结

    这篇文章主要介绍了springboot中server.ssl.key-store配置路径的问题,文中还记录了Spring Boot SSL(https)实例,介绍在web程序中使用自签名的SSL(HTTPS)证书及创建SSL认证,感兴趣的朋友跟随小编一起看看吧
    2024-02-02

最新评论