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

RabbitMQ中的Channel和Exchange詳解

 更新時間:2023年08月28日 10:13:12   作者:weixin_44463587  
這篇文章主要介紹了RabbitMQ中的Channel和Exchange詳解,創(chuàng)建和銷毀TCP連接很耗時,打開太多TCP連接,耗操作系統(tǒng)資源,并發(fā)量大到一定程度,系統(tǒng)的吞吐量會降低,使用一個connection多channel的方式,可以提升連接的利用率,需要的朋友可以參考下

channel 

有了TCP連接后,還需要channel的原因如下:

  • 創(chuàng)建和銷毀TCP連接很耗時;
  • 打開太多TCP連接,耗操作系統(tǒng)資源,并發(fā)量大到一定程度,系統(tǒng)的吞吐量會降低;
  • 使用一個connection多channel的方式,可以提升連接的利用率。

因此采用多個channel多路復(fù)用一個TCP連接的方式才比較合理

exchange(交換機(jī))

生產(chǎn)者發(fā)消息發(fā)往交換機(jī),交換機(jī)會自己投遞消息到綁定的queue隊(duì)列

1.exchange根據(jù)什么規(guī)則把消息投遞到哪些queue中?

exchange有4種類型

  • direct: 對routing_key進(jìn)行嚴(yán)格匹配,當(dāng)消息來到的時候,只有exchange與某queue綁定的routing_key完全匹配才將消息投遞到該queue
  • topic: 對routing_key進(jìn)行通配符模糊匹配,滿足條件的queue都能收到消息,這里的routing_key以"."分隔,*匹配一個單詞,#匹配多個單詞,如果同一個queue滿足多個條件不會被投遞多次

如果消息的routingkey是quick.orange.rabbit,那么Q1 Q2都會收到這條消息。

如果消息的routingkey是quick.orange.fox,那么Q1會收到這條消息

  • headers: 根據(jù)消息體內(nèi)的headers屬性匹配,綁定的時候可以制定鍵值對。不依賴routing_key匹配。

大致邏輯與direct差不多,只不過不是用的routing_key來匹配

  • fanout: 轉(zhuǎn)發(fā)消息到所有綁定隊(duì)列,不依賴routing_key匹配

在不需要路由的時候,一般是使用的這個類型的exchange。

  1. 發(fā)布訂閱:兩個queue綁定到同一個exchange上,那么同一個消息被發(fā)送到exchange后,exchange會把這個消息發(fā)給綁定的所有隊(duì)列,兩個消費(fèi)者,一人消費(fèi)一個隊(duì)列,這就在這兩個消費(fèi)者之間達(dá)到了發(fā)布訂閱的效果
  2.  競爭消費(fèi):兩個消費(fèi)者消費(fèi)同一個隊(duì)列,這就達(dá)到了這兩個消費(fèi)者之間的競爭消費(fèi)效果。

注意,實(shí)際上在寫代碼的時候不顯示指定exchange的數(shù)據(jù)是發(fā)送到一個默認(rèn)的exchange上的。

2.exchange持久化怎么搞?

如果不設(shè)置持久化,broker掛了,再重啟,這個exchange就不存在了。

在客戶端聲明exchange的時候有個入?yún)砜刂剖欠癯志没?/p>

而autoDelete則是,當(dāng)沒有queue綁定的時候是否自動刪除這個exchange

3.生產(chǎn)者ACK機(jī)制?

事務(wù)或者confirm機(jī)制:

rabbitmq生產(chǎn)者確保消息一定送達(dá)

這個需要借助Server和MQ的交互實(shí)現(xiàn)(tx-select/commit, ok/fail)

4.投遞方法

basicPublish中的mandatory和immediate mandatory

當(dāng)mandatory標(biāo)志位設(shè)置為true時如果exchange根據(jù)自身類型和消息routeKey無法找到一個符合條件的queue,那么會調(diào)用basic.return方法將消息返回給生產(chǎn)者

(Basic.Return + Content-Header + Content-Body);

當(dāng)mandatory設(shè)置為false時,出現(xiàn)上述情形broker會直接將消息扔掉。

immediate 當(dāng)immediate標(biāo)志位設(shè)置為true時,如果exchange在將消息路由到queue(s)時發(fā)現(xiàn)對于的queue上沒有消費(fèi)者,那么這條消息不會放入隊(duì)列中。

當(dāng)與消息routeKey關(guān)聯(lián)的所有queue(一個或者多個)都沒有消費(fèi)者時,該消息會通過basic.return方法返還給生產(chǎn)者。

換句話說,無法找到一個消費(fèi)者時,消息返還給生產(chǎn)者

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

相關(guān)文章

  • java equals和=,==的區(qū)別詳細(xì)介紹

    java equals和=,==的區(qū)別詳細(xì)介紹

    這篇文章主要介紹了java equals和=,==的區(qū)別,學(xué)習(xí)Java的朋友對equals 和== 這個概念開始使用的時候會有疑問,很難辨別如何正確使用,這里幫大家詳細(xì)講解該知識點(diǎn),希望大家能掌握,有需要的小伙伴可以參考下
    2016-10-10
  • Gauva使用ListenableFuture介紹說明

    Gauva使用ListenableFuture介紹說明

    并發(fā)是一個困難問題,但是通過強(qiáng)大和強(qiáng)大的抽象能夠顯著的簡化工作。為了簡化問題,Gauva使用ListenableFuture擴(kuò)展了JDK的Future接口,這篇文章主要介紹了Gauva使用ListenableFuture
    2023-01-01
  • Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析

    Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析

    這篇文章主要介紹了Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 解決springboot application.yml變灰色的問題

    解決springboot application.yml變灰色的問題

    這篇文章主要介紹了解決springboot application.yml變灰色的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java Unicode和UTF-8之間轉(zhuǎn)換實(shí)例

    java Unicode和UTF-8之間轉(zhuǎn)換實(shí)例

    這篇文章主要介紹了java Unicode和UTF-8之間轉(zhuǎn)換實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Centos中yum方式安裝java的實(shí)現(xiàn)示例

    Centos中yum方式安裝java的實(shí)現(xiàn)示例

    這篇文章主要介紹了Centos中yum方式安裝java的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • MybatisPlus代碼生成器的使用方法詳解

    MybatisPlus代碼生成器的使用方法詳解

    在這里我將展示如何自動生成實(shí)體類、控制層、服務(wù)層、mapper等代碼,這些基礎(chǔ)的代碼全部不需要我們手動創(chuàng)建,由MybatisPlus自動幫我們完成,我們只需要告訴MybatisPlus怎么生成這些代碼就可以了,在此之前我們需要配置好測試的環(huán)境,數(shù)據(jù)庫和表數(shù)據(jù) ,需要的朋友可以參考下
    2021-06-06
  • 解決Java變異出現(xiàn)錯誤No enclosing instance of type XXX is accessible

    解決Java變異出現(xiàn)錯誤No enclosing instance of type XXX is accessible

    這牌你文章主要給大家分享解決Java變異出現(xiàn)錯誤,具體的饑餓絕方案請看下面文章的內(nèi)容,需要的朋友可以參考一下,希望能幫助到你
    2021-09-09
  • Spring?Boot的幾種統(tǒng)一處理方式梳理小結(jié)

    Spring?Boot的幾種統(tǒng)一處理方式梳理小結(jié)

    這篇文章主要為大家介紹了Spring?Boot的幾種統(tǒng)一處理方式梳理小結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 詳解Java設(shè)計模式之外觀模式

    詳解Java設(shè)計模式之外觀模式

    在Java開發(fā)中,設(shè)計模式是一種十分常見的編程思想,它可以幫助我們解決很多實(shí)際開發(fā)中的問題,本篇文章將介紹一種常見的設(shè)計模式——外觀模式,并結(jié)合實(shí)際的開發(fā)場景進(jìn)行講解,需要的朋友可以參考下
    2023-06-06

最新評論