1、簡介
消息中間件也稱消息隊列,是指用高效可靠的消息傳遞機制進行與平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成。通過提供消息傳遞和消息隊列模型,可以在分布式環(huán)境下擴展進程的通信。
消息傳遞:指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進行通信,而不是通過直接調(diào)用彼此來通信
2、當(dāng)下主流的消息中間件
RabbitMQ、Kafka、ActiveMQ、RocketMQ
3、作用
冗余(存儲)、擴展性、可恢復(fù)性、順序保證、緩沖、異步通信、多語言客戶端、管理界面、插件機制
4、消息中間件的兩種模式
1、P2P模式
1.三角色:
消息隊列Queue、發(fā)送者Sender、接收者Receiver
2.P2P特點
- 每個消息只有一個消費者(Consumer),即一旦被消費,消息就不再在消息隊列中
- 發(fā)送者和接收者之間在時間上沒有依賴性,也就是說當(dāng)發(fā)送者發(fā)送了消息之后,不管接收者有沒有正在運行它不會影響到消息被發(fā)送到隊列
- 接收者在成功接收消息之后需向隊列應(yīng)答成功
- 如果希望發(fā)送的每個消息都會被成功處理的話,那么需要P2P模式
2、Pub/Sub模式
- 三角色:
主題Topic、發(fā)布者Publisher、訂閱者Subscriber
- 特點
- 每個消息可以有多個消費者
- 發(fā)布者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須創(chuàng)建一個訂閱者之后,才能消費發(fā)布者的消息
- 為了消費消息,訂閱者必須保持運行的狀態(tài)
- 如果希望發(fā)送的消息可以不被做任何處理、或者只被一個消息者處理、或者可以被多個消費者處理的話,那么可以采用Pub/Sub模型
5、RabbitMQ的三種模式
單一模式、普通模式、鏡像模式(將消息隊列做成鏡像隊列,存放于多個節(jié)點,屬于HA方案?;谄胀耗J缴吓渲苗R像模式,實現(xiàn)高可用)
6、RabbitMQ的集群節(jié)點
1、內(nèi)存節(jié)點:所有數(shù)據(jù)存儲在內(nèi)存
2、磁盤節(jié)點保存狀態(tài)到內(nèi)存和磁盤
7、RabbitMQ簡介
基于Erlong語言開發(fā),基于AMQP協(xié)議實現(xiàn)。本身不支持反正;支持高并發(fā)、可擴展。支持AJAX、持久化,用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息
8、了解RabbitMQ
在RabbitMQ集群中,必須至少有一個磁盤節(jié)點,否則隊列元數(shù)據(jù)無法寫入集群中,當(dāng)磁盤節(jié)點宕掉時,集群無法寫入新的隊列元數(shù)據(jù)信息。
9、集群重啟順序
啟動順序:磁盤節(jié)點--->內(nèi)存結(jié)點
關(guān)閉順序:內(nèi)存節(jié)點--->磁盤節(jié)點
注意:最后關(guān)閉的一定時磁盤節(jié)點,否則會造成啟動失敗、數(shù)據(jù)丟失等異常情況。