面試時,碰到消息隊列RabbitMQ問題應(yīng)該怎么說?
MQ全稱為Message Queue, 消息隊列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過讀寫出入隊列的消息(針對應(yīng)用程序的數(shù)據(jù))來通信,而無需專用連接來鏈接它們。
消息傳遞指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進(jìn)行通信,而不是通過直接調(diào)用彼此來通信,直接調(diào)用通常是用于諸如遠(yuǎn)程過程調(diào)用的技術(shù)。排隊指的是應(yīng)用程序通過 隊列來通信。隊列的使用除去了接收和發(fā)送應(yīng)用程序同時執(zhí)行的要求。
RabbitMQ是使用Erlang語言開發(fā)的開源消息隊列系統(tǒng),基于AMQP協(xié)議來實現(xiàn)。AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布/訂閱)、可靠性、安全。
AMQP協(xié)議更多用在企業(yè)系統(tǒng)內(nèi),對數(shù)據(jù)一致性、穩(wěn)定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。
一、為什么要使用 rabbitmq
在分布式系統(tǒng)下具備異步,削峰,負(fù)載均衡等一系列高級功能;
擁有持久化的機(jī)制,進(jìn)程消息,隊列中的信息也可以保存下來。
實現(xiàn)消費者和生產(chǎn)者之間的解耦。
對于高并發(fā)場景下,利用消息隊列可以使得同步訪問變?yōu)榇性L問達(dá)到一定量的限流,利于數(shù)據(jù)庫的操作。
可以使用消息隊列達(dá)到異步下單的效果,排隊中,后臺進(jìn)行邏輯下單。
二、消息隊列優(yōu)勢
1、應(yīng)用解耦消息隊列可以使消費者和生產(chǎn)者直接互不干涉,互不影響,只需要把消息發(fā)送到隊列即可,而且可獨立的擴(kuò)展或修改兩邊的處理過程,只要能確保它們遵守同樣的接口約定,可以生產(chǎn)者用Node.js實現(xiàn),消費者用python實現(xiàn)。
2、靈活性和峰值處理能力當(dāng)客戶端訪問量突然劇增,對服務(wù)器的訪問已經(jīng)超過服務(wù)所能處理的最大峰值,甚至導(dǎo)致服務(wù)器超時負(fù)載崩潰,使用消息隊列可以解決這個問題,可以通過控制消費者的處理速度和生產(chǎn)者可進(jìn)入消息隊列的數(shù)量等來避免峰值問題。
3、排序保證消息隊列可以控制數(shù)據(jù)處理的順序,因為消息隊列本身使用的是隊列這個數(shù)據(jù)結(jié)構(gòu),F(xiàn)IFO(先進(jìn)選出),在一些場景數(shù)據(jù)處理的順序很重要,比如商品下單順序等。
4、異步通信消息隊列中的有些消息,并不需要立即處理,消息隊列提供了異步處理機(jī)制,可以把消息放在隊列中并不立即處理,需要的時候處理,或者異步慢慢處理,一些不重要的發(fā)送短信和郵箱功能可以使用。
5、可擴(kuò)展性前面提到了消息隊列可以做到解耦,如果我們想增強(qiáng)消息入隊和出隊的處理頻率,很簡單,并不需要改變代碼中任何內(nèi)容,可以直接對消息隊列修改一些配置即可,比如我們想限制每次發(fā)送給消費者的消息條數(shù)等。有優(yōu)勢定有它現(xiàn)實的應(yīng)用場景,文章后面會針對優(yōu)勢講它們對應(yīng)的應(yīng)用場景。
親,別只看,你試試呀!直接進(jìn)入新網(wǎng),裝個 RabbitMQ,挺有意思的。 http://www.xinnet.com/cs/rabbitmq.html
聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)
送郵件至:operations@xinnet.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時
需注明出處:新網(wǎng)idc知識百科