Messges Queue消息隊列詳解
1、什么是消息隊列
消息隊列一般簡稱為 MQ (Messges Queue),是指利用高效可靠的消息傳遞機制進行與平臺無關的數據交流,并基于數據通信來進行分布式系統(tǒng)的集成,是在消息的傳輸過程中保存消息的容器。
消息隊列本質上是一個隊列,而隊列中存放的是一個個消息。
隊列是一個數據結構,具有先進先出的特點。
而消息隊列就是將消息放到隊列里,用隊列做存儲消息的介質。
消息的發(fā)送放稱為生產者,消息的接收方稱為消費者。
消息隊列由 Broker(消息服務器,核心部分)、Producer(消息生產者)、Consumer(消息消費者)、Topic(主題)、Queue(隊列)和Message(消息體)組成。
2、消息隊列特點
- 流量削峰:主要用于在高并發(fā)情況下,業(yè)務異步處理,提供高峰期業(yè)務處理能力,避免系統(tǒng)癱瘓。
假設系統(tǒng)只能處理1000個請求,但這時突然來了3000個請求,如果不加以限制就會造成系統(tǒng)癱瘓。使用消息隊列做緩沖,將多余的請求存放在消息隊列中,等系統(tǒng)根據自己處理請求的能力去消息隊列去。
- 應用解耦:主要用于當一個業(yè)務需要多個模塊共同實現,或者一條消息有多個系統(tǒng)需要對應處理時,只需要主業(yè)務完成以后,發(fā)送一條MQ,其余模塊消費MQ消息,即可實現業(yè)務,降低模塊之間的耦合。
假設某個服務 A 需要調用服務 B,但是服務 B 突然出現問題,這樣會導致服務 A 也會出現問題。如果使用消息隊列,當服務 A 執(zhí)行完成之后,發(fā)送一條消息到隊列中,服務 B 讀取到這條消息,那么它立刻開始進行業(yè)務的執(zhí)行。
- 異步通信:主業(yè)務執(zhí)行結束后從屬業(yè)務通過MQ,異步執(zhí)行,減低業(yè)務的響應時間,提高用戶體驗。
假設有一個業(yè)務,要先執(zhí)行服務 A ,然后服務 A 去調用服務 B ,當服務 B 完成之后,服務 A 調用服務 C,這個業(yè)務需要一步步走下去。當使用了消息隊列之后,服務 A 完成之后,可以同時執(zhí)行服務 B 和 服務 C ,這樣就減低業(yè)務的響應時間,提高用戶體驗。
3、消息隊列的的傳輸模式
- 點對點模式:用于消息生產者和消息消費者之間點到點的通信。
消息生產者將消息發(fā)送到Queue(隊列)中,然后消息消費者從Queue(隊列)找取出消息,當消息被消費之后就從Queue(隊列)中刪除,消息只能被一個消息消費者使用。
- 發(fā)布/訂閱模式:消息生產者向一個特定的Topic(主題)生產消息。0或多個訂閱了該Topic(主題)的消息消費者,接收Topic(主題)的消息, 在這種情況下發(fā)布者和訂閱者彼此不知道。
消息生產者和消息消費者只有建立了訂閱關系才能收到消息。
Topic(主題)實現了發(fā)布和訂閱,當消息生產者發(fā)布一個消息,所有訂閱這個Topic(主題)的服務都能得到這個消息。
有兩種訂閱類型:
- 持久訂閱:訂閱關系建立后,消息就不會消失,不管訂閱者是否都在線;
- 非持久訂閱:訂閱者為了接受消息,必須一直在線。 當只有一個訂閱者時約等于點對點模式
4、常用的消息隊列
- ActiveMQ:是Apache下的一個子項目。
- 優(yōu)點:單機吞吐量每秒萬級,時效性毫秒級,可用性高,基于主從架構實現高可用性,消息可靠性較低的概率丟失數據。支持多種語言、支持Spring2.0的特性、支持多種傳送協(xié)議、支持通過JDBC和journal提供高速的消息持久化。
- 缺點:官方社區(qū)現在的維護越來越少;社區(qū)活躍度不高。
- Kafka:是一個分布式消息發(fā)布訂閱系統(tǒng)。為大數據而生的消息中間件,大數據的殺手锏
- 優(yōu)點:單機吞吐量每秒百萬級,時效性毫秒級,不會丟失數據,不會導致不可用
- 缺點:支持消息順序,但是一臺代理宕機后,就會產生消息亂序;消費失敗不支持重試;社區(qū)更新較慢
- RocketMQ:阿里系下開源的一款分布式、隊列模型的消息中間件,3.0版本名稱改為RocketMQ,是阿里參照 kafka 設計思想使用 java 實現的一套消息隊列。
- 優(yōu)點:單機吞吐量十萬級,時效性毫秒級,消息可以做到 0 丟失,支持 10 億級別的消息堆積
- 缺點:支持的客戶端語言不多,目前是 java 及 c++;社區(qū)活躍度一般;
- RabbitMQ:是使用Erlang編寫的一個開源的消息隊列
- 優(yōu)點:單機吞吐量萬級,時效性微秒級,支持多種語言
到此這篇關于Messges Queue消息隊列詳解的文章就介紹到這了,更多相關消息隊列詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring的循環(huán)依賴、三級緩存解決方案源碼詳細解析
這篇文章主要介紹了Spring的循環(huán)依賴、三級緩存解決方案源碼詳細解析,在Spring中,由于IOC的控制反轉,創(chuàng)建對象不再是簡單的new出來,而是交給Spring去創(chuàng)建,會經歷一系列Bean的生命周期才創(chuàng)建出相應的對象,需要的朋友可以參考下2024-01-01Java多線程之readwritelock讀寫分離的實現代碼
這篇文章主要介紹了Java多線程之readwritelock讀寫分離的相關內容,文中涉及具體實例代碼,具有一定參考價值,需要的朋友可以了解下。2017-10-10springboot整合websocket后啟動報錯(javax.websocket.server.ServerCont
這篇文章主要介紹了springboot整合websocket后啟動報錯(javax.websocket.server.ServerContainer not available),通過分析錯誤信息、排查代碼和配置,找出問題的根源,并給出相應的解決方案,感興趣的可以了解一下2024-01-01spring boot實戰(zhàn)教程之shiro session過期時間詳解
這篇文章主要給大家介紹了關于spring boot實戰(zhàn)教程之shiro session過期時間的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-10-10