網站首頁 編程語言 正文
我們知道無論是生產者還是消費者,都需要和 RabbitMQ Broker 建立連接,這個連接就是一條 TCP 連接,也就是 Connection。
一旦 TCP 連接建立起來,客戶端緊接著可以創(chuàng)建一個 AMQP 信道(Channel),每個信道都會被指派一個唯一的 ID。
信道是建立在 Connection 之上的虛擬連接,RabbitMQ 處理的每條 AMQP 指令都是通過信道完成的。
我們完全可以使用 Connection 就能完成信道的工作,為什么還要引入信道呢?
試想這樣一個場景,一個應用程序中有很多個線程需要從 RabbitMQ 中消費消息,或者生產消息,那么必然需要建立很多個 Connection,也就是多個 TCP 連接。
然而對于操作系統(tǒng)而言,建立和銷毀 TCP 連接是非常昂貴的開銷,如果遇到使用高峰,性能瓶頸也隨之顯現。
RabbitMQ 采用類似 NIO(Non-blocking I/O)的做法,選擇 TCP 連接復用,不僅可以減少性能開銷,同時也便于管理。
每個線程把持一個信道,所以信道復用了 Connection 的 TCP 連接。同時 RabbitMQ 可以確保每個線程的私密性,就像擁有獨立的連接一樣。當每個信道的流量不是很大時,復用單一的 Connection 可以在產生性能瓶頸的情況下有效地節(jié)省 TCP 連接資源。但是信道本身的流量很大時,這時候多個信道復用一個 Connection 就會產生性能瓶頸,進而使整體的流量被限制了。此時就需要開辟多個 Connection,將這些信道均攤到這些 Connection 中,至于這些相關的調優(yōu)策略需要根據業(yè)務自身的實際情況進行調節(jié)。
信道在 AMQP 中是一個很重要的概念,大多數操作都是在信道這個層面展開的。
比如 channel.exchangeDeclare、channel.queueDeclare、channel.basicPublish、channel.basicConsume 等方法。
RabbitMQ 相關的 API 與 AMQP 緊密相連,比如 channel.basicPublish 對應 AMQP 的 Basic.Publish 命令。
名詞解釋:
NIO,也稱非阻塞 I/O,包含三大核心部分:Channel(信道)、Buffer(緩沖區(qū))和 Selector(選擇器)。
NIO 基于 Channel 和 Buffer 進行操作,數據總是從信道讀取數據到緩沖區(qū)中,或者從緩沖區(qū)寫入到信道中。
Selector 用于監(jiān)聽多個信道的時間(比如連接打開,數據到達等)。因此,單線程可以監(jiān)聽多個數據的信道。
?
原文鏈接:https://blog.csdn.net/LiZhen314/article/details/123635271
相關推薦
- 2023-02-05 expect實現Linux自動登陸遠程機器腳本實例_Linux
- 2022-08-22 pyecharts繪制時間輪播圖柱形圖+餅圖+玫瑰圖+折線圖_python
- 2022-05-10 FactoryBean配置文件定義的 類型 調用時返回 不同的類型
- 2022-07-25 C++數據結構之雙向鏈表_C 語言
- 2022-05-17 Python映射類型之dict詳解_python
- 2022-06-12 C語言數據結構中堆排序的分析總結_C 語言
- 2023-01-30 使用uniapp打包上架微信小程序完整教程_其它相關
- 2022-12-26 python畫圖時linestyle,color和loc參數的設置方式_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支