1. MQ介紹
MQ(Message Queue)用于在應(yīng)用程序之間相互通信,在消息中發(fā)送數(shù)據(jù)進(jìn)行通信,而不需要特意建立連接傳輸數(shù)據(jù)。
與之對(duì)應(yīng)的另一種通信方式是遠(yuǎn)程直接調(diào)用(RPC),需要先建立通信連接然后傳遞數(shù)據(jù)。
2. RabbitMQ
2.1 簡介
RabbitMQ是一個(gè)開源的消息隊(duì)列系統(tǒng),使用Erlang語言編寫的,基于AMQP協(xié)議的。
AMQP全程是Advanced Message Queuing Protocol,即高級(jí)消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個(gè)開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)。具有面向信息、隊(duì)列、路由(包括點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱)、可靠性、安全等特征。
2.2 架構(gòu):組件解釋
RabbitMQ的架構(gòu)圖如下所示:
下面介紹一下其中的主要概念:
-
Producer
:消息生產(chǎn)者,就是投遞消息的程序。 -
Connection
:AMQP客戶端到broker的TCP連接。 -
Channal
:在connection內(nèi)部建立的邏輯練級(jí),這樣一個(gè)connection能夠承載多個(gè)訪問; -
Broker
:消息隊(duì)列服務(wù)器實(shí)體。 -
Virtual Host
:虛擬主機(jī),在多個(gè)用戶使用同一個(gè)RabbitMQ服務(wù)器的時(shí)候,用于進(jìn)行邏輯隔離, -
Exchange
:消息交換機(jī),它指定消息中的routing key按什么規(guī)則,路由到哪個(gè)隊(duì)列。主要的分配類型包括:- Direct:點(diǎn)對(duì)點(diǎn)(完全匹配)
- Fanout:廣播
- Topic:主題(規(guī)則匹配)
-
Queue
:數(shù)據(jù)隊(duì)列,消息的載體,每個(gè)消息都會(huì)被投入到一個(gè)或多個(gè)隊(duì)列。 -
binding
:是exchange和queue之間的虛擬連接,包含routing key。
2.3 特點(diǎn)
RaybbiMQ具有如下特點(diǎn):文章來源:http://www.zghlxwxcb.cn/news/detail-570956.html
- 可靠性:持久化、生產(chǎn)確認(rèn)等傳輸機(jī)制保證傳輸?shù)目煽啃裕?/li>
- 靈活路由:使用exchange機(jī)制靈活路由,下面會(huì)詳細(xì)介紹;
- 消息集群:多服務(wù)器組成集群;
- 隊(duì)列可用性:隊(duì)列在集群的機(jī)器上可以鏡像,部分節(jié)點(diǎn)出問題不影響整體可用性;
- 支持多種協(xié)議:對(duì)于STOMP、MQTT等消息隊(duì)列協(xié)議的支持;
- 跟蹤機(jī)制:對(duì)于異常消息提供消息跟蹤,方便確認(rèn)異常原因;
- 用戶友好:多語言客戶端,管理界面易用,提供多種插件,也允許用戶自己實(shí)現(xiàn)插件;
2.4 優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn)
RabbitMQ具有解耦、異步、削峰的優(yōu)勢;- 解耦:
- 對(duì)于數(shù)據(jù)傳入,一般的做法是直接把數(shù)據(jù)放在傳輸包中,從發(fā)送發(fā)傳遞給接收方,但是對(duì)于RaybbiMQ,發(fā)送方只需要把數(shù)據(jù)放在消息隊(duì)列中,接收方從消息隊(duì)列中獲取數(shù)據(jù)即可,這樣就實(shí)現(xiàn)了解耦;
- 這樣的好處是發(fā)送發(fā)的隊(duì)列數(shù)據(jù)持久化,不會(huì)因?yàn)榻邮辗降膯栴}導(dǎo)致數(shù)據(jù)丟失,同時(shí)隊(duì)列中的持久化數(shù)據(jù)可以被多次復(fù)用。
- 異步:
- 正如解耦部分的解釋,讀寫操作是異步進(jìn)行的,不需要等待接收方的處理,這樣就提高了系統(tǒng)的吞吐量;
- 削峰:
- 當(dāng)在活動(dòng)日出現(xiàn)大規(guī)模交易的時(shí)候,如果按照傳統(tǒng)的收發(fā)操作,會(huì)造成服務(wù)器的承載負(fù)擔(dān),相信大家都遇到過服務(wù)器崩潰的情況,這對(duì)于用戶和公司來說都是很糟糕的情況;
- 使用RabbitMQ的時(shí)候,先暫時(shí)將客戶端的請(qǐng)求數(shù)據(jù)放在隊(duì)列中,然后再慢慢處理,這樣就可以避免服務(wù)器的崩潰。
- 解耦:
- 缺點(diǎn)
- 系統(tǒng)復(fù)雜度:RabbitMQ的使用會(huì)增加系統(tǒng)的復(fù)雜度,需要考慮到消息的可靠性、重復(fù)消費(fèi)、消息丟失等問題;
- 系統(tǒng)可用性:當(dāng)MQ崩潰的時(shí)候,整個(gè)系統(tǒng)就會(huì)陷入癱瘓,不使用RabbitMQ的時(shí)候,只要幾個(gè)服務(wù)節(jié)點(diǎn)能夠正常運(yùn)行,整個(gè)系統(tǒng)就可以正常運(yùn)行;
- 一致性問題:當(dāng)多個(gè)消費(fèi)者同時(shí)對(duì)一個(gè)隊(duì)列進(jìn)行讀寫,就會(huì)產(chǎn)生一致性問題
面試模擬
Q: 為什么選擇使用RabbitMQ?
A:因?yàn)镽abbitMQ具有解耦、異步、削峰的優(yōu)點(diǎn),維護(hù)消息隊(duì)列,提高傳輸?shù)目煽啃院妥x寫異步。文章來源地址http://www.zghlxwxcb.cn/news/detail-570956.html
參考資料
- RabbitMQ 的應(yīng)用場景以及基本原理介紹
- rabbitMQ到底是個(gè)啥東西?
- 一文帶你了解RabbitMQ到底是個(gè)什么鬼!
到了這里,關(guān)于【后端面經(jīng)-架構(gòu)】RabbitMQ簡介的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!