消息隊列(天書)

定義:消息隊列是在消息傳輸過程中保存消息的容器

消息隊列是同步 :調用消息就直接傳送過去

消息隊列是異步:消息發到盒子裏,什麼時候用什麼時候調。

參考https://www.jianshu.com/p/1582b37291f9瞭解什麼是消息隊列

 

MQ的作用

1、解耦:在項目啓動之初是很難預測未來會遇到什麼困難的,消息中間件在處理過程中插入了一個隱含的,基於數據的接口層,兩邊都實現這個接口,這樣就允許獨立的修改或者擴展兩邊的處理過程,只要兩邊遵守相同的接口約束即可。

2、冗餘(存儲):在某些情況下處理數據的過程中會失敗,消息中間件允許把數據持久化知道他們完全被處理

3、擴展性:消息中間件解耦了應用的過程,所以提供消息入隊和處理的效率是很容易的,只需要增加處理流程就可以了。

4、削峯:在訪問量劇增的情況下,但是應用仍然需要發揮作用,但是這樣的突發流量並不常見。而使用消息中間件採用隊列的形式可以減少突發訪問壓力,不會因爲突發的超時負荷要求而崩潰

5、可恢復性:當系統一部分組件失效時,不會影響到整個系統。消息中間件降低了進程間的耦合性,當一個處理消息的進程掛掉後,加入消息中間件的消息仍然可以在系統恢復後重新處理

6、順序保證:在大多數場景下,處理數據的順序也很重要,大部分消息中間件支持一定的順序性

7、緩衝:消息中間件通過一個緩衝層來幫助任務最高效率的執行

8、異步通信:通過把把消息發送給消息中間件,消息中間件並不立即處理它,後續在慢慢處理。

 

ActiveMQ

1、支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

2、多語言和協議編寫客戶端:

語言:Java,C,C++,C#,Ruby,Perl,PHP,Python。

應用協議:OpenWire,Stomp,REST,WS-Notification,XMPP,AMQP

3、和Spring完美結合。

4、不需要任何第三方工具:因爲AcitveMQ是一個獨立的jms provider

5、消息持久化:支持通過JDBC和journal提供高速度消息持久化

6、從設計上保證了高性能的集羣,客戶端-服務器,點對點

單點:無法滿足企業高可用和集羣的需求,所以ActiveMQ提供了master-slave,broker cluster等多種部署方式。

集羣:Master-Slave的部署方式雖然解決了高可用的問題,但不支持負載均衡。Broker-Cluster解決了負載均衡,但當其中一個Broker突然宕掉的話,那存在於該Broker上出去Pending狀態的message會消失,無法達到高可用的目的。一般項目中用到的是Master-Slave和Broker-Cluster相結合的部署方式。

 

RabbitMQ

1、可靠性:RabbitMQ使用一些機制來保證可靠性,如持久化、傳輸確認及發佈確認等。

2、靈活的路由:在消息進入隊列之前,通過交換器來路由消息。對於典型的路由功能,RabbitMQ己經提供了一些內置的交換器來實現。針對更復雜的路由功能,可以將多個交換器綁定在一起,也可以通過插件機制來實現自己的交換器。

3、擴展性:多個RabbitMQ節點可以組成一個集羣,也可以根據實際業務情況動態地擴展集羣中節點。

4、高可用性:隊列可以在集羣中的機器上設置鏡像,使得在部分節點出現問題的情況下隊仍然可用。

5、多種協議:RabbitMQ除了原生支持AMQP協議,還支持STOMP,MQTT等多種消息中間件協議。

6、多語言客戶端:RabbitMQ幾乎支持所有常用語言,比如Jav a、Python、Ruby、PHP、C#、JavaScript等。

7、管理界面:RabbitMQ提供了一個易用的用戶界面,使得用戶可以監控和管理消息、集羣中的節點等。

8、插件機制:RabbitMQ提供了許多插件,以實現從多方面進行擴展,當然也可以編寫自己的插件。

參考https://blog.csdn.net/weixin_40792878/article/details/82555791瞭解RabbitMQ

 

Kafka

1、高吞吐量、低延遲:kafka每秒可以處理幾十萬條消息,它的延遲最低只有幾毫秒,每個topic可以分多個partition, consumer group 對partition進行consume操作。

2、可擴展性:kafka集羣支持熱擴展

3、持久性、可靠性:消息被持久化到本地磁盤,並且支持數據備份防止數據丟失

4、容錯性:允許集羣中節點失敗(若副本數量爲n,則允許n-1個節點失敗)

5、高併發:支持數千個客戶端同時讀寫

 參考https://blog.csdn.net/selfsojourner/article/details/79980965https://blog.csdn.net/u012986057/article/details/50580490

 

RocketMQ

RocketMQ是淘寶根據Kafka的特性用Java語言編寫的中間件,在阿里集團廣泛應用

參考https://blog.csdn.net/zhangll_2008/article/details/78657177

https://yq.aliyun.com/articles/624207?utm_content=m_1000012577瞭解RocketMQ

 

對比

參考https://www.cnblogs.com/mengchunchen/p/9999774.html對各消息隊列進行對比

參考https://blog.csdn.net/paincupid/article/details/79721817RocketMQ與kafka對比(18項差異)-轉自阿里中間件 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章