一、什么是消息隊列?
在百度百科中,消息隊列是這么解釋的:“消息隊列”是在消息的傳輸過(guò)程中保存消息的容器。
消息隊列全稱(chēng)為英文Message Queue簡(jiǎn)稱(chēng)(MQ)是一種應用程序對應用程序的通信方法。MQ是消費-生產(chǎn)者模型的一個(gè)典型的代表,一端往消息隊列中不斷寫(xiě)入消息,而另一端則可以取隊列中的消息。消息發(fā)布者(生產(chǎn)者)只管把消息發(fā)布到MQ中而不用管誰(shuí)來(lái)取,消息使用者(消費方)只管從MQ中取消息而不用管是誰(shuí)發(fā)布的。
二、為什么使用消息隊列?
使用消息隊列主要有兩點(diǎn)好處:1.通過(guò)異步處理提高系統性能(削峰、減少響應所需時(shí)間);2.降低系統耦合性。
(1) 通過(guò)異步處理提高系統性能(削峰、減少響應所需時(shí)間)
在不使用消息隊列的時(shí)候,用戶(hù)的請求數據直接寫(xiě)入數據庫,在高并發(fā)的情況下數據庫壓力劇增,使得響應速度變慢。但是在使用消息隊列之后,用戶(hù)的請求數據發(fā)送給消息隊列之后立即 返回,再由消息隊列的消費者進(jìn)程從消息隊列中獲取數據,異步寫(xiě)入數據庫。由于消息隊列服務(wù)器處理速度快于數據庫(消息隊列也比數據庫有更好的伸縮性),因此響應速度得到大幅改善。
通過(guò)以上分析我們可以得出消息隊列具有很好的削峰作用的功能——即通過(guò)異步處理,將短時(shí)間高并發(fā)產(chǎn)生的事務(wù)消息存儲在消息隊列中,從而削平高峰期的并發(fā)事務(wù)。 舉例:在電子商務(wù)一些秒殺、促銷(xiāo)活動(dòng)中,合理使用消息隊列可以有效抵御促銷(xiāo)活動(dòng)剛開(kāi)始大量訂單涌入對系統的沖擊。
因為用戶(hù)請求數據寫(xiě)入消息隊列之后就立即返回給用戶(hù)了,但是請求數據在后續的業(yè)務(wù)校驗、寫(xiě)數據庫等操作中可能失敗。因此使用消息隊列進(jìn)行異步處理之后,需要適當修改業(yè)務(wù)流程進(jìn)行配合,比如用戶(hù)在提交訂單之后,訂單數據寫(xiě)入消息隊列,不能立即返回用戶(hù)訂單提交成功,需要在消息隊列的訂單消費者進(jìn)程真正處理完該訂單之后,甚至出庫后,再通過(guò)電子郵件或短信通知用戶(hù)訂單成功,以免交易糾紛。這就類(lèi)似我們平時(shí)手機訂火車(chē)票和電影票。
(2) 降低系統耦合性
??我們知道如果模塊之間不存在直接調用,那么新增模塊或者修改模塊就對其他模塊影響較小,這樣系統的可擴展性無(wú)疑更好一些。
??我們最常見(jiàn)的事件驅動(dòng)架構類(lèi)似生產(chǎn)者消費者模式,在大型網(wǎng)站中通常用利用消息隊列實(shí)現事件驅動(dòng)結構。
??消息隊列使利用發(fā)布-訂閱模式工作,消息發(fā)送者(生產(chǎn)者)發(fā)布消息,一個(gè)或多個(gè)消息接受者(消費者)訂閱消息。 從上圖可以看到消息發(fā)送者(生產(chǎn)者)和消息接受者(消費者)之間沒(méi)有直接耦合,消息發(fā)送者將消息發(fā)送至分布式消息隊列即結束對消息的處理,消息接受者從分布式消息隊列獲取該消息后進(jìn)行后續處理,并不需要知道該消息從何而來(lái)。對新增業(yè)務(wù),只要對該類(lèi)消息感興趣,即可訂閱該消息,對原有系統和業(yè)務(wù)沒(méi)有任何影響,從而實(shí)現網(wǎng)站業(yè)務(wù)的可擴展性設計。
??消息接受者對消息進(jìn)行過(guò)濾、處理、包裝后,構造成一個(gè)新的消息類(lèi)型,將消息繼續發(fā)送出去,等待其他消息接受者訂閱該消息。因此基于事件(消息對象)驅動(dòng)的業(yè)務(wù)架構可以是一系列流程。
??另外為了避免消息隊列服務(wù)器宕機造成消息丟失,會(huì )將成功發(fā)送到消息隊列的消息存儲在消息生產(chǎn)者服務(wù)器上,等消息真正被消費者服務(wù)器處理后才刪除消息。在消息隊列服務(wù)器宕機后,生產(chǎn)者服務(wù)器會(huì )選擇分布式消息隊列服務(wù)器集群中的其他服務(wù)器發(fā)布消息。
為用戶(hù)提供快速創(chuàng )建、方便管理的消息中間件。http://wap.friendlycc.com.cn/
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站