定義:消息隊列是在消息傳輸過程中保存消息的容器
消息隊列是同步 :調用消息就直接傳送過去
消息隊列是異步:消息發到盒子裏,什麼時候用什麼時候調。
參考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/79980965和https://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項差異)-轉自阿里中間件