欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

RabbitMQ中的Connection和Channel信道詳解

 更新時間:2023年08月28日 10:29:38   作者:LiZhen798  
這篇文章主要介紹了RabbitMQ中的Connection和Channel信道詳解,信道是建立在 Connection 之上的虛擬連接,RabbitMQ 處理的每條 AMQP 指令都是通過信道完成的,需要的朋友可以參考下

RabbitMQ的Connection和Channel

我們知道無論是生產(chǎn)者還是消費者,都需要和 RabbitMQ Broker 建立連接,這個連接就是一條 TCP 連接,也就是 Connection。

一旦 TCP 連接建立起來,客戶端緊接著可以創(chuàng)建一個 AMQP 信道(Channel),每個信道都會被指派一個唯一的 ID。

信道是建立在 Connection 之上的虛擬連接,RabbitMQ 處理的每條 AMQP 指令都是通過信道完成的。

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

試想這樣一個場景,一個應(yīng)用程序中有很多個線程需要從 RabbitMQ 中消費消息,或者生產(chǎn)消息,那么必然需要建立很多個 Connection,也就是多個 TCP 連接。

然而對于操作系統(tǒng)而言,建立和銷毀 TCP 連接是非常昂貴的開銷,如果遇到使用高峰,性能瓶頸也隨之顯現(xiàn)。

RabbitMQ 采用類似 NIO(Non-blocking I/O)的做法,選擇 TCP 連接復(fù)用,不僅可以減少性能開銷,同時也便于管理。

每個線程把持一個信道,所以信道復(fù)用了 Connection 的 TCP 連接。

同時 RabbitMQ 可以確保每個線程的私密性,就像擁有獨立的連接一樣。當每個信道的流量不是很大時,復(fù)用單一的 Connection 可以在產(chǎn)生性能瓶頸的情況下有效地節(jié)省 TCP 連接資源。

但是信道本身的流量很大時,這時候多個信道復(fù)用一個 Connection 就會產(chǎn)生性能瓶頸,進而使整體的流量被限制了。

此時就需要開辟多個 Connection,將這些信道均攤到這些 Connection 中,至于這些相關(guān)的調(diào)優(yōu)策略需要根據(jù)業(yè)務(wù)自身的實際情況進行調(diào)節(jié)。

信道在 AMQP 中是一個很重要的概念,大多數(shù)操作都是在信道這個層面展開的。

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

RabbitMQ 相關(guān)的 API 與 AMQP 緊密相連,比如 channel.basicPublish 對應(yīng) AMQP 的 Basic.Publish 命令。

名詞解釋:

NIO,也稱非阻塞 I/O,包含三大核心部分:Channel(信道)、Buffer(緩沖區(qū))和 Selector(選擇器)。

NIO 基于 Channel 和 Buffer 進行操作,數(shù)據(jù)總是從信道讀取數(shù)據(jù)到緩沖區(qū)中,或者從緩沖區(qū)寫入到信道中。

Selector 用于監(jiān)聽多個信道的時間(比如連接打開,數(shù)據(jù)到達等)。因此,單線程可以監(jiān)聽多個數(shù)據(jù)的信道。

到此這篇關(guān)于RabbitMQ中的Connection和Channel信道詳解的文章就介紹到這了,更多相關(guān)RabbitMQ的Connection和Channel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談java中的路徑表示

    淺談java中的路徑表示

    下面小編就為大家?guī)硪黄獪\談java中的路徑表示。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • MyBatis XML方式的基本用法之多表查詢功能的示例代碼

    MyBatis XML方式的基本用法之多表查詢功能的示例代碼

    這篇文章主要介紹了MyBatis XML方式的基本用法之多表查詢功能的示例代碼,本文通過示例文字相結(jié)合的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Java實現(xiàn)為圖片添加水印功能

    Java實現(xiàn)為圖片添加水印功能

    在圖像處理領(lǐng)域,水印是一種常見的保護版權(quán)和標識圖片歸屬的方法,Java提供了強大的圖像處理能力,可以通過Graphics2D類在圖像上繪制水印,下面我們來看看具體操作步驟吧
    2025-02-02
  • idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案

    idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案

    這篇文章主要介紹了idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • 解決Nacos成功啟動但是無法訪問 (Connection refused)

    解決Nacos成功啟動但是無法訪問 (Connection refused)

    這篇文章主要介紹了解決Nacos成功啟動但是無法訪問 (Connection refused)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 創(chuàng)建自定義的Java注解類的方法

    創(chuàng)建自定義的Java注解類的方法

    這篇文章主要介紹了創(chuàng)建自定義的Java注解類的方法,主要部分為創(chuàng)建一個帶有Java類型@interface的新類型,需要的朋友可以參考下
    2015-07-07
  • Java刪除二叉搜索樹的任意元素的方法詳解

    Java刪除二叉搜索樹的任意元素的方法詳解

    這篇文章主要介紹了Java刪除二叉搜索樹的任意元素的方法,結(jié)合實例形式詳細分析了java這對二叉搜索樹的遍歷、查找、刪除等相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2020-03-03
  • 使用Sentinel實現(xiàn)流控和服務(wù)降級的代碼示例

    使用Sentinel實現(xiàn)流控和服務(wù)降級的代碼示例

    Sentinel是面向分布式、多語言異構(gòu)化服務(wù)架構(gòu)的流量治理組件,本文將詳細為大家介紹如何使用Sentinel實現(xiàn)流控和服務(wù)降級,文中有相關(guān)的代碼示例,需要的朋友可以參考下
    2023-05-05
  • Spring?Aware接口示例代碼詳解

    Spring?Aware接口示例代碼詳解

    Spring的依賴注入的最大亮點是所有的Bean對Spring容器的存在是沒有意識的,我們可以將Spring容器換成其他的容器,Spring容器中的Bean的耦合度因此也是極低的,本文給大家介紹Spring?Aware接口示例代碼詳解,感興趣的朋友一起看看吧
    2022-02-02
  • Java之Spring注解配置bean實例代碼解析

    Java之Spring注解配置bean實例代碼解析

    這篇文章主要介紹了Java之Spring注解配置bean實例代碼解析,具有一定參考價值,文中還有有關(guān)Spring學習的資料下載鏈接及相關(guān)內(nèi)容推薦,需要的朋友可以了解下。
    2017-09-09

最新評論