日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【146期】面试官问:说一说 RabbitMQ 的几种工作模式和优化建议?

發(fā)布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【146期】面试官问:说一说 RabbitMQ 的几种工作模式和优化建议? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點(diǎn)擊上方“Java精選”,選擇“設(shè)為星標(biāo)”

別問別人為什么,多問自己憑什么!

下方留言必回,有問必答!

每天?08:00?更新文章,每天進(jìn)步一點(diǎn)點(diǎn)...

1.組件介紹

  • Broker:它提供一種傳輸服務(wù),它的角色就是維護(hù)一條從生產(chǎn)者到消費(fèi)者的路線,保證數(shù)據(jù)能按照指定的方式進(jìn)行傳輸。

  • Exchange:消息交換機(jī),它指定消息按什么規(guī)則,路由到哪個隊(duì)列。

  • Queue:消息的載體,每個消息都會被投到一個或多個隊(duì)列。

  • Binding:綁定,它的作用就是把exchange和queue按照路由規(guī)則綁定起來。

  • Routing Key:路由關(guān)鍵字,exchange根據(jù)這個關(guān)鍵字進(jìn)行消息投遞。

  • vhost:虛擬主機(jī),一個broker里可以有多個vhost,用作不同用戶的權(quán)限分離。

  • Producer:消息生產(chǎn)者,就是投遞消息的程序。

  • Consumer:消息消費(fèi)者,就是接受消息的程序。

  • Channel:消息通道,在客戶端的每個連接里,可建立多個channel。

  • 2.消息發(fā)布和接收流程

    一.如何發(fā)送消息

  • 生產(chǎn)者和Broker建立TCP連接;

  • 生產(chǎn)者和Broker建立通道;

  • 生產(chǎn)者通過通道消息發(fā)送給Broker,由Exchange將消息進(jìn)行轉(zhuǎn)發(fā);

  • Exchange將消息轉(zhuǎn)發(fā)到止跌那個的Queue(隊(duì)列)。

  • 二.如何接收消息

  • 消費(fèi)者和Broker建立TCP連接;

  • 消費(fèi)者和Broker建立通道;

  • 消費(fèi)者監(jiān)聽制定的Queue(隊(duì)列);

  • 當(dāng)有消息到達(dá)Queue時Broker默認(rèn)將消息推送給消費(fèi)者;

  • 消費(fèi)者接受到消息。

  • 3.工作模式

    1. Direct 廣播模式

    是最簡單的模式.即創(chuàng)建消息隊(duì)列的時候,指定一個路由鍵(RoutingKey)。當(dāng)發(fā)送者發(fā)送消息的時候,指定對應(yīng)的Key。當(dāng)Key和消息隊(duì)列的RoutingKey一致的時候,消息將會被發(fā)送到該消息隊(duì)列中。推薦:Java進(jìn)階學(xué)習(xí)資料。

    2.Topic 主題交換區(qū)模式

    topic轉(zhuǎn)發(fā)信息主要是依據(jù)通配符,隊(duì)列和交換機(jī)的綁定主要是依據(jù)一種模式(通配符+字符串),而當(dāng)發(fā)送消息的時候,只有指定的Key和該模式相匹配的時候,消息才會被發(fā)送到該消息隊(duì)列中.通配符:*?表示一個詞,#?表示零個或多個詞

    3.fanout是路由廣播的形式

    fanout是路由廣播的形式,將會把消息發(fā)給綁定它的全部隊(duì)列,即便設(shè)置了key,也會被忽略。因此我們發(fā)送到交換機(jī)的消息會使得綁定到該交換機(jī)的每一個Queue接收到消息,這個時候就算指定了路由鍵(routingKey),或者規(guī)則(即上文中convertAndSend方法的參數(shù)2),也會被忽略!

    4.RabbitMQ優(yōu)化建議

    1、加大服務(wù)器帶寬

    訪問量大時,較長的數(shù)據(jù)容易將帶寬占滿。如服務(wù)器上傳帶寬為10M,則實(shí)際上傳帶寬可認(rèn)為1M,每秒上傳量為1M/1K=1K。如果把帶寬加到100M,則每秒上傳量為10K。一般情況下,RabbitMq服務(wù)器能夠接受的每秒寫入量為20K-50K(8G內(nèi)存),因此在帶寬在不足200M的時候,加大帶寬會產(chǎn)生很明顯的提升作用,再往上效果就可能不那么明顯了。推薦:Java進(jìn)階學(xué)習(xí)資料。

    2、加大內(nèi)存

    RabbitMq的機(jī)制是先將消息放在內(nèi)存中,然后分批寫入硬盤。小批量數(shù)據(jù)的寫入基本上都放在內(nèi)存中,內(nèi)存數(shù)據(jù)量過大時會一邊把客戶端的數(shù)據(jù)往內(nèi)存里寫,一邊將內(nèi)存里的陳舊數(shù)據(jù)往硬盤里寫,這樣會對速度造成較嚴(yán)重的損耗。適度的增加內(nèi)存,隊(duì)列將會更多的消息放在內(nèi)存中,增加系統(tǒng)的處理速度。

    3、使用固態(tài)硬盤

    機(jī)械硬盤的寫入速度較慢,處理大量數(shù)據(jù)時機(jī)械硬盤對性能的損耗十分嚴(yán)重。如果要存放1億條數(shù)據(jù),所需要的硬盤大小為100G,建議采用100-500G固態(tài)硬盤。再加上消費(fèi)端在不斷的處理數(shù)據(jù),一般待處理的消息能夠達(dá)到千萬級別已經(jīng)相當(dāng)不容易了

    4、增加生產(chǎn)者

    服務(wù)器可以建立多個連接,單個生產(chǎn)者往往不能充分利用服務(wù)器的潛能,建立多個生產(chǎn)者之后,服務(wù)器處理能力將會得到充分利用。一般情況下,一個生產(chǎn)者每秒可以傳入1000-5000條消息,在1-10這個范圍內(nèi),每增加一個生產(chǎn)者,處理速度就會相對單生產(chǎn)者增加一倍

    5、增加消費(fèi)者

    消費(fèi)者增多時,出隊(duì)速度有明顯改善。該方案對于出隊(duì)速度的影響有限,1-10個進(jìn)程范圍內(nèi),相對于單進(jìn)程只有一倍左右的提升,建議線程開2-5個即可,再多可能影響不大。出現(xiàn)該現(xiàn)象的原因可能是服務(wù)器帶寬或硬件處理能力有限,消費(fèi)者增加了也沒什么用處。因?yàn)闆]有實(shí)際環(huán)境測試,此條只列為建議,采用前可以多做實(shí)驗(yàn)

    6、改網(wǎng)絡(luò)訪問為本地訪問

    該方案在消費(fèi)端/生產(chǎn)端與RabbitMq服務(wù)器部署在同一臺電腦時有用,因?yàn)槭÷粤司W(wǎng)絡(luò)傳輸,大大節(jié)省了處理時間。如果消費(fèi)端/生產(chǎn)端與RabbitMq服務(wù)器分開部署,該方案就不能使用了。在代碼中將IP地址127.0.0.1改為localhost即可。

    作者:精誠所至金石為開

    blog.csdn.net/smartsteps/article/details/107002567

    精品資料,超贊福利!

    >Java精選面試題<
    3000+ 道面試題在線刷,最新、最全 Java 面試題!

    期往精選??點(diǎn)擊標(biāo)題可跳轉(zhuǎn)

    【138期】手?jǐn)] websocket + netty 實(shí)時視頻彈幕交互功能(Java版附源碼)

    【139期】面試官問:一般后端接口都測試什么?怎么測?

    【140期】阿里技術(shù)經(jīng)理問:ReadWriteLock 讀寫之間互斥嗎?

    【141期】JDK8 Stream 操作 collectingAndThen:根據(jù)對象的屬性去重

    【142期】List 中 remove() 方法的“陷阱”,被坑慘了!

    【143期】面試官問:說一說 Spring 和 Spring Boot 核心的 3 大區(qū)別?

    【144期】拼多多面試官問:假設(shè)使用 Redis, 如何統(tǒng)計(jì)獨(dú)立用戶訪問量?

    【145期】面試官:Java 數(shù)組中 new Object[5] 語句是否創(chuàng)建了 5 個對象?

    文章有幫助的話,在看,轉(zhuǎn)發(fā)吧!

    總結(jié)

    以上是生活随笔為你收集整理的【146期】面试官问:说一说 RabbitMQ 的几种工作模式和优化建议?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。