什么是消息隊列,你知道我們?yōu)槭裁葱枰鼏幔?/h1>
分類:云服務(wù)資訊
編輯:聊聊云計算
瀏覽量:214
2020-10-28 16:20:54
在百度百科中,消息隊列是這么解釋的:“消息隊列”是在消息的傳輸過程中保存消息的容器。
消息隊列全稱為英文Message Queue簡稱(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。MQ是消費-生產(chǎn)者模型的一個典型的代表,一端往消息隊列中不斷寫入消息,而另一端則可以取隊列中的消息。消息發(fā)布者(生產(chǎn)者)只管把消息發(fā)布到MQ中而不用管誰來取,消息使用者(消費方)只管從MQ中取消息而不用管是誰發(fā)布的。
二、為什么使用消息隊列?
使用消息隊列主要有兩點好處:1.通過異步處理提高系統(tǒng)性能(削峰、減少響應(yīng)所需時間);2.降低系統(tǒng)耦合性。
(1) 通過異步處理提高系統(tǒng)性能(削峰、減少響應(yīng)所需時間)
在不使用消息隊列服務(wù)器的時候,用戶的請求數(shù)據(jù)直接寫入數(shù)據(jù)庫,在高并發(fā)的情況下數(shù)據(jù)庫壓力劇增,使得響應(yīng)速度變慢。但是在使用消息隊列之后,用戶的請求數(shù)據(jù)發(fā)送給消息隊列之后立即 返回,再由消息隊列的消費者進程從消息隊列中獲取數(shù)據(jù),異步寫入數(shù)據(jù)庫。由于消息隊列服務(wù)器處理速度快于數(shù)據(jù)庫(消息隊列也比數(shù)據(jù)庫有更好的伸縮性),因此響應(yīng)速度得到大幅改善。
通過以上分析我們可以得出消息隊列具有很好的削峰作用的功能——即通過異步處理,將短時間高并發(fā)產(chǎn)生的事務(wù)消息存儲在消息隊列中,從而削平高峰期的并發(fā)事務(wù)。 舉例:在電子商務(wù)一些秒殺、促銷活動中,合理使用消息隊列可以有效抵御促銷活動剛開始大量訂單涌入對系統(tǒng)的沖擊。
因為用戶請求數(shù)據(jù)寫入消息隊列之后就立即返回給用戶了,但是請求數(shù)據(jù)在后續(xù)的業(yè)務(wù)校驗、寫數(shù)據(jù)庫等操作中可能失敗。因此使用消息隊列進行異步處理之后,需要適當修改業(yè)務(wù)流程進行配合,比如用戶在提交訂單之后,訂單數(shù)據(jù)寫入消息隊列,不能立即返回用戶訂單提交成功,需要在消息隊列的訂單消費者進程真正處理完該訂單之后,甚至出庫后,再通過電子郵件或短信通知用戶訂單成功,以免交易糾紛。這就類似我們平時手機訂火車票和電影票。
(2) 降低系統(tǒng)耦合性
我們知道如果模塊之間不存在直接調(diào)用,那么新增模塊或者修改模塊就對其他模塊影響較小,這樣系統(tǒng)的可擴展性無疑更好一些。
我們最常見的事件驅(qū)動架構(gòu)類似生產(chǎn)者消費者模式,在大型網(wǎng)站中通常用利用消息隊列實現(xiàn)事件驅(qū)動結(jié)構(gòu)。
消息隊列使利用發(fā)布-訂閱模式工作,消息發(fā)送者(生產(chǎn)者)發(fā)布消息,一個或多個消息接受者(消費者)訂閱消息。 從上圖可以看到消息發(fā)送者(生產(chǎn)者)和消息接受者(消費者)之間沒有直接耦合,消息發(fā)送者將消息發(fā)送至分布式消息隊列即結(jié)束對消息的處理,消息接受者從分布式消息隊列獲取該消息后進行后續(xù)處理,并不需要知道該消息從何而來。對新增業(yè)務(wù),只要對該類消息感興趣,即可訂閱該消息,對原有系統(tǒng)和業(yè)務(wù)沒有任何影響,從而實現(xiàn)網(wǎng)站業(yè)務(wù)的可擴展性設(shè)計。
消息接受者對消息進行過濾、處理、包裝后,構(gòu)造成一個新的消息類型,將消息繼續(xù)發(fā)送出去,等待其他消息接受者訂閱該消息。因此基于事件(消息對象)驅(qū)動的業(yè)務(wù)架構(gòu)可以是一系列流程。
另外為了避免消息隊列服務(wù)器宕機造成消息丟失,會將成功發(fā)送到消息隊列的消息存儲在消息生產(chǎn)者服務(wù)器上,等消息真正被消費者服務(wù)器處理后才刪除消息。在消息隊列服務(wù)器宕機后,生產(chǎn)者服務(wù)器會選擇分布式消息隊列服務(wù)器集群中的其他服務(wù)器發(fā)布消息。
新網(wǎng)為用戶提供快速創(chuàng)建、方便管理的消息中間件。http://www.xinnet.com/cs/rabbitmq.html
聲明:免責聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認相關(guān)法律責任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)
送郵件至:operations@xinnet.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時
需注明出處:新網(wǎng)idc知識百科