摘要:概述概述消息隊列,是分布式系統(tǒng)中重要的組件,是一種進程間通信或者是同一進程的不同線程的通信方式。消息隊列的使用場景消息隊列的使用場景異步處理流量控制應(yīng)用解耦應(yīng)用解耦應(yīng)用解耦消息隊列的一個作用就是實現(xiàn)系統(tǒng)應(yīng)用之間的解耦。
消息隊列(Message Queue),是分布式系統(tǒng)中重要的組件,是一種進程間通信或者是同一進程的不同線程的通信方式。和 http 同步協(xié)議不同的是,消息隊列是一種異步的通信協(xié)議,不需要立即獲得結(jié)果。
消息隊列的一個作用就是實現(xiàn)系統(tǒng)應(yīng)用之間的解耦。舉例一下電商系統(tǒng)的中的訂單系統(tǒng)。
當(dāng)創(chuàng)建一個訂單時:
這些訂單下游的系統(tǒng)都需要實時獲得訂單數(shù)據(jù),隨著業(yè)務(wù)量的增大和業(yè)務(wù)的變更,有一段時間不需要發(fā)消息給客戶,或者需要添加功能,每次都需要不斷的調(diào)式訂單系統(tǒng)和下游系統(tǒng)。
引入消息隊列后,訂單服務(wù)在創(chuàng)建訂單時發(fā)送一條信息到消息隊列主題 Order 中,所有的下游都訂閱主題Order,這樣無論增加、減少下游系統(tǒng)還是下游系統(tǒng)的功能如何變化,訂單服務(wù)都不需要做更改了,實現(xiàn)了訂單服務(wù)和下游服務(wù)的解耦。
異步處理是將很多串行進行的步驟轉(zhuǎn)成異步處理,還是已訂單系統(tǒng)為例,下單訂單需要創(chuàng)建訂單和鎖定庫存,確定本次請求后馬上給用戶返回響應(yīng),然后把后續(xù)請求的數(shù)據(jù)的都在消息隊列,由消息隊列異步處理。
這樣把五個步驟減少為兩個步驟,假設(shè)每個步驟處理時間需要500ms,在不考慮網(wǎng)絡(luò)延遲的情況下:
串行處理: 500 * 5 = 2500ms
并行處理:500 * 2 = 1000ms
系統(tǒng)響應(yīng)時間縮短一半以上。這樣響應(yīng)速度更快,而且把請求放在后續(xù)操作,可以充分利用更多的資源處理請求。
所以我們可以看到,實現(xiàn)異步操作的服務(wù):
在購物網(wǎng)站的做一個秒殺活動,平時網(wǎng)站能支撐每秒1000次并發(fā)請求,但是電商秒殺一下請求猛增到每秒3000次請求,多出來的請求,可能直接讓系統(tǒng)宕機。
所以我們就需要使用消息隊列來控制流量,當(dāng)系統(tǒng)短時間接收到大量請求時,會先將請求堆積到消息隊列上,后端服務(wù)從消息隊列上消費數(shù)據(jù),消息隊列相對于給后端服務(wù)做了一次緩沖。
上面的概述總結(jié)起來有個三個優(yōu)點:異步、削峰和解耦。
缺點有以下幾個:
在rabbitmq官網(wǎng)教程上介紹了幾種工作模式,
The simplest thing that does something
從上面的示意圖看出來 simple 模式有以下幾個特征:
在多個消費者之間分配任務(wù)(競爭消費者模式)
創(chuàng)建一個工作隊列,添加多個消費者共同消費工作隊列上的任務(wù)。每一個消息都給一個消費者消費
工作模式中每個消息只能被一個消費者消費,發(fā)布訂閱模式是每個消息同時給多個消費者消費。
上圖中的X
表示Exchange
交換器,Exchange
類型有:Direct、Topic、Headers和Fanout。
路由模式中的交換器類型為 direct,在同一個交換器,由生產(chǎn)者指定指定目標(biāo)隊列。
RoutingKey 是生產(chǎn)者指定 Exchange 路由到哪個隊列,BindingKey 用于消費者綁定到某個隊列
主題模式是根據(jù)通配符綁定隊列,其中 * 可以替換任務(wù)一個標(biāo)識符,# 可以替換多個標(biāo)識符,通配符和名稱使用 . 隔開。
如果覺得文章對你有幫助的話,請點個推薦吧!!!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/123763.html
摘要:以下為大家整理了阿里巴巴史上最全的面試題,涉及大量面試知識點和相關(guān)試題。的內(nèi)存結(jié)構(gòu),和比例。多線程多線程的幾種實現(xiàn)方式,什么是線程安全。點擊這里有一套答案版的多線程試題。線上系統(tǒng)突然變得異常緩慢,你如何查找問題。 以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識點和相關(guān)試題。 JAVA基礎(chǔ) JAVA中的幾種基本數(shù)據(jù)類型是什么,各自占用多少字節(jié)。 S...
摘要:這里有一份面試題相關(guān)總結(jié),涉及高并發(fā)分布式高可用相關(guān)知識點,在此分享給大家,希望大家能拿到一份理想的知識點會陸續(xù)更新在上,覺得還算湊和的話可以關(guān)注一下噢高并發(fā)架構(gòu)消息隊列為什么使用消息隊列消息隊列有什么優(yōu)點和缺點都有什么優(yōu)點和缺點如何保證消 這里有一份面試題相關(guān)總結(jié),涉及高并發(fā)、分布式、高可用相關(guān)知識點,在此分享給大家,希望大家能拿到一份理想的 Offer! 知識點會陸續(xù)更新在 Git...
摘要:只允許有一個主進程接受客戶事務(wù)請求并處理,收到請求后,將其轉(zhuǎn)化為事務(wù)。并開啟新一輪選舉,新的會和過半的進行同步數(shù)據(jù)。同步結(jié)束時,切換為消息廣播模式。若非節(jié)點收到客戶請求,則該節(jié)點會將該請求發(fā)送到服務(wù)器上。 zookeeper 它為分布式應(yīng)用提供了高效可靠的分布式協(xié)調(diào)服務(wù)。 實現(xiàn)依賴于 ZAB協(xié)議,實現(xiàn)了主備模式架構(gòu)用來保持集群中數(shù)據(jù)的一致性 Zookeeper 將所有數(shù)據(jù)存放在 內(nèi)存...
閱讀 3697·2023-04-26 02:24
閱讀 1007·2023-04-25 14:47
閱讀 2670·2021-11-24 11:16
閱讀 1826·2021-11-24 09:38
閱讀 1679·2021-11-18 10:07
閱讀 2131·2021-09-22 15:49
閱讀 1664·2019-08-30 15:55
閱讀 963·2019-08-26 13:38