RabbitMQ消息隊列(中間件)MQ


MQ(消息隊列)

MQ全稱為Message Queue, 消息隊列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。

介紹:消息隊列就是基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)中的“先進先出”的一種數(shù)據(jù)機構(gòu)。想一下,生活中買東西,需要排隊,先排的人先買消費,就是典型的“先進先出”。


消息傳遞:指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進行通信,而不是通過直接調(diào)用彼此來通信,直接調(diào)用通常是用于諸如遠程過程調(diào)用的技術(shù)。

排隊:指的是應(yīng)用程序通過隊列來通信。

為什么會產(chǎn)生消息MQ

隨著微服務(wù)架構(gòu)的流行,MQ成了解決微服務(wù)之間問題的常用工具。

以電商應(yīng)用為例,應(yīng)用中有訂單系統(tǒng)、庫存系統(tǒng)、物流系統(tǒng)、支付系統(tǒng)。用戶創(chuàng)建訂單后,如果耦合調(diào)用庫存系統(tǒng)、物流系統(tǒng)、支付系統(tǒng),任何一個子系統(tǒng)出了故障,都會造成下單操作異常。

當(dāng)轉(zhuǎn)變成基于消息隊列的方式后,系統(tǒng)間調(diào)用的問題會減少很多,比如物流系統(tǒng)因為發(fā)生故障,需要幾分鐘來修復(fù)。在這幾分鐘的時間里,物流系統(tǒng)要處理的內(nèi)存被緩存在消息隊列中,用戶的下單操作可以正常完成。當(dāng)物流系統(tǒng)恢復(fù)后,繼續(xù)處理訂單信息即可,中單用戶感受不到物流系統(tǒng)的故障。提升系統(tǒng)的可用性。


不同進程(process)之間傳遞消息時,兩個進程之間耦合程度過高,改動一個進程,引發(fā)必須修改另一個進程,為了隔離這兩個進程,在兩進程間抽離出一層(一個模塊),所有兩進程之間傳遞的消息,都必須通過消息隊列來傳遞,單獨修改某一個進程,不會影響另一個;不同進程(process)之間傳遞消息時,為了實現(xiàn)標(biāo)準(zhǔn)化,將消息的格式規(guī)范化了,并且,某一個進程接受的消息太多,一下子無法處理完,并且也有先后順序,必須對收到的消息進行排隊,因此誕生了事實上的消息隊列;在項目中,可將一些無需即時返回且耗時的操作提取出來,進行**異步處理**,而這種異步處理的方式大大的節(jié)省了服務(wù)器的請求響應(yīng)時間,從而**提高**了**系統(tǒng)**的**吞吐量**。

消息隊列應(yīng)用場景

應(yīng)用解耦

以電商應(yīng)用為例,應(yīng)用中有訂單系統(tǒng)、庫存系統(tǒng)、物流系統(tǒng)、支付系統(tǒng)。用戶創(chuàng)建訂單后,如果耦合調(diào)用庫存系統(tǒng)、物流系統(tǒng)、支付系統(tǒng),任何一個子系統(tǒng)出了故障,都會造成下單操作異常。

當(dāng)轉(zhuǎn)變成基于消息隊列的方式后,系統(tǒng)間調(diào)用的問題會減少很多,比如物流系統(tǒng)因為發(fā)生故障,需要幾分鐘來修復(fù)。在這幾分鐘的時間里,物流系統(tǒng)要處理的內(nèi)存被緩存在消息隊列中,用戶的下單操作可以正常完成。當(dāng)物流系統(tǒng)恢復(fù)后,繼續(xù)處理訂單信息即可,中單用戶感受不到物流系統(tǒng)的故障。提升系統(tǒng)的可用性。

傳統(tǒng)模式:


傳統(tǒng)模式的缺點:

系統(tǒng)間耦合性太強,如上圖所示,系統(tǒng)A在代碼中直接調(diào)用系統(tǒng)B和系統(tǒng)C的代碼,如果將來D系統(tǒng)接入,系統(tǒng)A還需要修改代碼,過于麻煩!

中間件模式:


中間件模式的優(yōu)點:

將消息寫入消息列表,需要消息的系統(tǒng)自己從消息隊列中訂閱,從而系統(tǒng)A不需要做任何修改。

異步處理

場景說明:用戶注冊后,需要發(fā)注冊郵件和注冊短信,傳統(tǒng)的做法有兩種

1.串行的方式;

2.并行的方式

(1)串行方式:將注冊信息寫入數(shù)據(jù)庫后,發(fā)送注冊郵件,再發(fā)送注冊短信,以上三個任務(wù)全部完成后才返回給客戶端。 這有一個問題是,郵件,短信并不是必須的,它只是一個通知,而這種做法讓客戶端等待沒有必要等待的東西.


(2)并行方式:將注冊信息寫入數(shù)據(jù)庫后,發(fā)送郵件的同時,發(fā)送短信,以上三個任務(wù)完成后,返回給客戶端,并行的方式能提高處理的時間。

(3)消息隊列

引入消息隊列后,把發(fā)送郵件,短信不是必須的業(yè)務(wù)邏輯異步處理


傳統(tǒng)模式的缺點:

一些非必要的業(yè)務(wù)邏輯以同步的方式運行,太耗費時間。

中間件模式的的優(yōu)點:

將消息寫入消息隊列,非必要的業(yè)務(wù)邏輯以異步的方式運行,加快響應(yīng)速度

流量削峰

流量削峰一般在秒殺活動中應(yīng)用廣泛

場景: 秒殺活動,一般會因為流量過大,導(dǎo)致應(yīng)用掛掉,為了解決這個問題,一般在應(yīng)用前端加入消息隊列。

作用:

1、可以控制活動人數(shù),超過此一定閾值的訂單直接丟棄。

2、可以緩解短時間的高流量壓垮應(yīng)用(應(yīng)用程序按自己的最大處理能力獲取訂單)

QPS

QPS:QPS即每秒查詢率,是對一個特定的查詢服務(wù)器在規(guī)定時間內(nèi)處理流量多少的衡量標(biāo)準(zhǔn)。因特網(wǎng)上,經(jīng)常用每秒查詢率來衡量域名系統(tǒng)服務(wù)器的機器的性能,即為QPS。

或者理解:每秒的響應(yīng)請求數(shù),也即是最大吞吐能力。

PV , UV , PR

PV(page view),即頁面瀏覽量,或點擊量;通常是衡量一個網(wǎng)絡(luò)新聞頻道或網(wǎng)站甚至一條網(wǎng)絡(luò)新聞的主要指標(biāo)。

對pv的解釋是,一個訪問者在24小時(0點到24點)內(nèi)到底看了你網(wǎng)站幾個頁面。這里需要強調(diào):同一個人瀏覽你網(wǎng)站同一個頁面,不重復(fù)計算pv量,點100次也算1次。說白了,pv就是一個訪問者打開了你的幾個頁面。

PV之于網(wǎng)站,就像收視率之于電視,從某種程度上已成為投資者衡量商業(yè)網(wǎng)站表現(xiàn)的最重要尺度。

pv的計算:當(dāng)一個訪問著訪問的時候,記錄他所訪問的頁面和對應(yīng)的IP,然后確定這個IP今天訪問了這個頁面沒有。如果你的網(wǎng)站到了23點,單純IP有60萬條的話,每個訪問者平均訪問了3個頁面,那么pv表的記錄就要有180萬條。

uv(unique visitor),指訪問某個站點或點擊某條新聞的不同IP地址的人數(shù)。

PR值,即PageRank,網(wǎng)頁的級別技術(shù),用來標(biāo)識網(wǎng)頁的等級/重要性。級別從1到10級,10級為滿分。PR值越高說明該網(wǎng)頁越受歡迎(越重要)。

MQ有哪些缺點

1. 系統(tǒng)復(fù)雜性增加。畢竟是增加了一個中間件MQ,那么系統(tǒng)變得更復(fù)雜,就是不可避免的。但是,與其說是系統(tǒng)復(fù)雜性增加,不如說是給相關(guān)開發(fā)人員帶來的新的學(xué)習(xí)成本。但是,一項技術(shù)本身就是這樣,學(xué)時很痛苦,學(xué)會了,它就會變成一把利劍,幫助您開疆辟土。

2. 系統(tǒng)可用性降低。假設(shè)一個系統(tǒng)由若干個節(jié)點鏈?zhǔn)浇M成,每個節(jié)點出問題的概率是相同的,那么,20個節(jié)點的系統(tǒng)出問題的概率顯然要高于10個節(jié)點的系統(tǒng)。所以,從這個角度來看,畢竟是增加了一個MQ中間件,出問題的概率顯然會增大,系統(tǒng)可用性就會降低。

RabbitMQ

RabbitMQ提供了5種模式:

簡單模式:一個生產(chǎn)者發(fā)送消息到隊列中由一個消費者接收。

work模式:一個生產(chǎn)者、多個消費者,多個消費者,共同監(jiān)聽一個隊列,一個消息,只能被一個消費者獲取

Publish/Subscribe發(fā)布與訂閱模式:一個生產(chǎn)者并不會直接往一個隊列中發(fā)送消息。

Routing路由模式:會根據(jù)發(fā)送的key鍵發(fā)送給對應(yīng)隊列。

Topics主題模式:發(fā)送的消息以及與交換機與隊列綁定的關(guān)系都需設(shè)置自屬的路由鍵,并且綁定(Binding)的路由鍵支持通配符,生產(chǎn)者向交換機發(fā)送消息之后,交換機會在與之綁定的隊列中尋找路由鍵與消息的路由鍵能匹配上的隊列推送該消息。若沒有相匹配的,則該消息丟失。

代碼。。。不知道怎么放才好,第一次寫文章,希望多理解。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容