一、什么是消息隊(duì)列?
在百度百科中,消息隊(duì)列是這么解釋的:“消息隊(duì)列”是在消息的傳輸過(guò)程中保存消息的容器。
消息隊(duì)列全稱(chēng)為英文Message Queue簡(jiǎn)稱(chēng)(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。MQ是消費(fèi)-生產(chǎn)者模型的一個(gè)典型的代表,一端往消息隊(duì)列中不斷寫(xiě)入消息,而另一端則可以取隊(duì)列中的消息。消息發(fā)布者(生產(chǎn)者)只管把消息發(fā)布到MQ中而不用管誰(shuí)來(lái)取,消息使用者(消費(fèi)方)只管從MQ中取消息而不用管是誰(shuí)發(fā)布的。
二、為什么使用消息隊(duì)列?
使用消息隊(duì)列主要有兩點(diǎn)好處:1.通過(guò)異步處理提高系統(tǒng)性能(削峰、減少響應(yīng)所需時(shí)間);2.降低系統(tǒng)耦合性。
(1) 通過(guò)異步處理提高系統(tǒng)性能(削峰、減少響應(yīng)所需時(shí)間)
在不使用消息隊(duì)列的時(shí)候,用戶的請(qǐng)求數(shù)據(jù)直接寫(xiě)入數(shù)據(jù)庫(kù),在高并發(fā)的情況下數(shù)據(jù)庫(kù)壓力劇增,使得響應(yīng)速度變慢。但是在使用消息隊(duì)列之后,用戶的請(qǐng)求數(shù)據(jù)發(fā)送給消息隊(duì)列之后立即 返回,再由消息隊(duì)列的消費(fèi)者進(jìn)程從消息隊(duì)列中獲取數(shù)據(jù),異步寫(xiě)入數(shù)據(jù)庫(kù)。由于消息隊(duì)列服務(wù)器處理速度快于數(shù)據(jù)庫(kù)(消息隊(duì)列也比數(shù)據(jù)庫(kù)有更好的伸縮性),因此響應(yīng)速度得到大幅改善。
通過(guò)以上分析我們可以得出消息隊(duì)列具有很好的削峰作用的功能——即通過(guò)異步處理,將短時(shí)間高并發(fā)產(chǎn)生的事務(wù)消息存儲(chǔ)在消息隊(duì)列中,從而削平高峰期的并發(fā)事務(wù)。 舉例:在電子商務(wù)一些秒殺、促銷(xiāo)活動(dòng)中,合理使用消息隊(duì)列可以有效抵御促銷(xiāo)活動(dòng)剛開(kāi)始大量訂單涌入對(duì)系統(tǒng)的沖擊。
因?yàn)橛脩粽?qǐng)求數(shù)據(jù)寫(xiě)入消息隊(duì)列之后就立即返回給用戶了,但是請(qǐng)求數(shù)據(jù)在后續(xù)的業(yè)務(wù)校驗(yàn)、寫(xiě)數(shù)據(jù)庫(kù)等操作中可能失敗。因此使用消息隊(duì)列進(jìn)行異步處理之后,需要適當(dāng)修改業(yè)務(wù)流程進(jìn)行配合,比如用戶在提交訂單之后,訂單數(shù)據(jù)寫(xiě)入消息隊(duì)列,不能立即返回用戶訂單提交成功,需要在消息隊(duì)列的訂單消費(fèi)者進(jìn)程真正處理完該訂單之后,甚至出庫(kù)后,再通過(guò)電子郵件或短信通知用戶訂單成功,以免交易糾紛。這就類(lèi)似我們平時(shí)手機(jī)訂火車(chē)票和電影票。
(2) 降低系統(tǒng)耦合性
我們知道如果模塊之間不存在直接調(diào)用,那么新增模塊或者修改模塊就對(duì)其他模塊影響較小,這樣系統(tǒng)的可擴(kuò)展性無(wú)疑更好一些。
我們最常見(jiàn)的事件驅(qū)動(dòng)架構(gòu)類(lèi)似生產(chǎn)者消費(fèi)者模式,在大型網(wǎng)站中通常用利用消息隊(duì)列實(shí)現(xiàn)事件驅(qū)動(dòng)結(jié)構(gòu)。
消息隊(duì)列使利用發(fā)布-訂閱模式工作,消息發(fā)送者(生產(chǎn)者)發(fā)布消息,一個(gè)或多個(gè)消息接受者(消費(fèi)者)訂閱消息。 從上圖可以看到消息發(fā)送者(生產(chǎn)者)和消息接受者(消費(fèi)者)之間沒(méi)有直接耦合,消息發(fā)送者將消息發(fā)送至分布式消息隊(duì)列即結(jié)束對(duì)消息的處理,消息接受者從分布式消息隊(duì)列獲取該消息后進(jìn)行后續(xù)處理,并不需要知道該消息從何而來(lái)。對(duì)新增業(yè)務(wù),只要對(duì)該類(lèi)消息感興趣,即可訂閱該消息,對(duì)原有系統(tǒng)和業(yè)務(wù)沒(méi)有任何影響,從而實(shí)現(xiàn)網(wǎng)站業(yè)務(wù)的可擴(kuò)展性設(shè)計(jì)。
消息接受者對(duì)消息進(jìn)行過(guò)濾、處理、包裝后,構(gòu)造成一個(gè)新的消息類(lèi)型,將消息繼續(xù)發(fā)送出去,等待其他消息接受者訂閱該消息。因此基于事件(消息對(duì)象)驅(qū)動(dòng)的業(yè)務(wù)架構(gòu)可以是一系列流程。
另外為了避免消息隊(duì)列服務(wù)器宕機(jī)造成消息丟失,會(huì)將成功發(fā)送到消息隊(duì)列的消息存儲(chǔ)在消息生產(chǎn)者服務(wù)器上,等消息真正被消費(fèi)者服務(wù)器處理后才刪除消息。在消息隊(duì)列服務(wù)器宕機(jī)后,生產(chǎn)者服務(wù)器會(huì)選擇分布式消息隊(duì)列服務(wù)器集群中的其他服務(wù)器發(fā)布消息。
涇川網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
為用戶提供快速創(chuàng)建、方便管理的消息中間件。http://aaarwkj.com/
當(dāng)前標(biāo)題:什么是消息隊(duì)列,你知道我們?yōu)槭裁葱枰鼏幔?/a>
網(wǎng)頁(yè)鏈接:http://aaarwkj.com/article44/ssdhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、App設(shè)計(jì)、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)公司、服務(wù)器托管、Google
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源:
創(chuàng)新互聯(lián)