教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

什么是消息隊列?消息隊列有哪些應(yīng)用場景?

更新時間:2021年09月28日17時40分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

消息隊列,英文名:Message Queue,經(jīng)??s寫為MQ。從字面上來理解,消息隊列是一種用來存儲消息的隊列。來看一下下面的代碼:

// 1. 創(chuàng)建一個保存字符串的隊列
Queue<String> stringQueue = new LinkedList<String>();
// 2. 往消息隊列中放入消息
stringQueue.offer("hello");
// 3. 從消息隊列中取出消息并打印
System.out.println(stringQueue.poll());

上述代碼,創(chuàng)建了一個隊列,先往隊列中添加了一個消息,然后又從隊列中取出了一個消息。這說明了隊列是可以用來存取消息的。我們可以簡單理解消息隊列就是將需要傳輸?shù)臄?shù)據(jù)存放在隊列中。

消息隊列中間件是用來存儲消息的軟件(組件)。舉個例子來理解,為了分析網(wǎng)站的用戶行為,我們需要記錄用戶的訪問日志。這些一條條的日志,可以看成是一條條的消息,我們可以將它們保存到消息隊列中。將來有一些應(yīng)用程序需要處理這些日志,就可以隨時將這些消息取出來處理。

目前市面上的消息隊列有很多,例如:Kafka、RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ等。

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

1.異步處理
電商網(wǎng)站中,新的用戶注冊時,需要將用戶的信息保存到數(shù)據(jù)庫中,同時還需要額外發(fā)送注冊的郵件通知、以及短信注冊碼給用戶。但因為發(fā)送郵件、發(fā)送注冊短信需要連接外部的服務(wù)器,需要額外等待一段時間,此時,就可以使用消息隊列來進(jìn)行異步處理,從而實現(xiàn)快速響應(yīng)。

1632821588139_消息隊列0.png

2.系統(tǒng)解耦

1632821593973_消息隊列2.png

如果庫存系統(tǒng)出現(xiàn)問題,會導(dǎo)致訂單系統(tǒng)下載失敗。而且如果庫存系統(tǒng)接口修改了,會導(dǎo)致訂單系統(tǒng)也無法工作。

使用消息隊列可以實現(xiàn)系統(tǒng)與系統(tǒng)之間的解耦,訂單系統(tǒng)不再調(diào)用庫存系統(tǒng)接口,而是把2訂單消息寫入到消息隊列。庫存系統(tǒng)從消息系統(tǒng)中拉取消息,然后再減庫存,從而實現(xiàn)系統(tǒng)解耦。

3.流量削峰

1632821599471_消息隊列3.png

4.日志處理(大數(shù)據(jù)領(lǐng)域常見)

大型電商網(wǎng)站(淘寶、京東、國美、蘇寧...)、App(抖音、美團(tuán)、滴滴等)等需要分析用戶行為,要根據(jù)用戶的訪問行為來發(fā)現(xiàn)用戶的喜好以及活躍情況,需要在頁面上收集大量的用戶訪問信息。

1632821605585_消息隊列4.png

5.生產(chǎn)者、消費(fèi)者模型

我們之前學(xué)習(xí)過Java的服務(wù)器開發(fā),Java服務(wù)器端開發(fā)的交互模型是這樣的:

1632821612883_消息隊列.png

我們之前也學(xué)習(xí)過使用Java JDBC來訪問操作MySQL數(shù)據(jù)庫,它的交互模型是這樣的:

1632821620663_消息隊列6.png

它也是一種請求響應(yīng)模型,只不過它不再是基于http協(xié)議,而是基于MySQL數(shù)據(jù)庫的通信協(xié)議。

而如果我們基于消息隊列來編程,此時的交互模式成為:生產(chǎn)者、消費(fèi)者模型。

1632821627384_消息隊列7.png



猜你喜歡:

kafka自定義攔截器實例教程[傳智教育]

Django如何給客戶端推送消息?App推送怎樣實現(xiàn)?

為什么選擇kafka采集數(shù)據(jù)?

消息中間件常用協(xié)議有哪些?

傳智教育python大數(shù)據(jù)開發(fā)培訓(xùn)

0 分享到:
和我們在線交談!