1蝌以、簡(jiǎn)介
消息中間件也稱(chēng)消息隊(duì)列躏惋,是指用高效可靠的消息傳遞機(jī)制進(jìn)行與平臺(tái)無(wú)關(guān)的數(shù)據(jù)交流发框,并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成泣懊。通過(guò)提供消息傳遞和消息隊(duì)列模型伸辟,可以在分布式環(huán)境下擴(kuò)展進(jìn)程的通信。
消息傳遞:指的是程序之間通過(guò)在消息中發(fā)送數(shù)據(jù)進(jìn)行通信馍刮,而不是通過(guò)直接調(diào)用彼此來(lái)通信
2信夫、當(dāng)下主流的消息中間件
RabbitMQ、Kafka、ActiveMQ忙迁、RocketMQ
3脐彩、作用
冗余(存儲(chǔ))、擴(kuò)展性姊扔、可恢復(fù)性惠奸、順序保證、緩沖恰梢、異步通信佛南、多語(yǔ)言客戶(hù)端、管理界面嵌言、插件機(jī)制
4嗅回、消息中間件的兩種模式
1、P2P模式
1.三角色:
消息隊(duì)列Queue摧茴、發(fā)送者Sender绵载、接收者Receiver
2.P2P特點(diǎn)
- 每個(gè)消息只有一個(gè)消費(fèi)者(Consumer),即一旦被消費(fèi)苛白,消息就不再在消息隊(duì)列中
- 發(fā)送者和接收者之間在時(shí)間上沒(méi)有依賴(lài)性娃豹,也就是說(shuō)當(dāng)發(fā)送者發(fā)送了消息之后,不管接收者有沒(méi)有正在運(yùn)行它不會(huì)影響到消息被發(fā)送到隊(duì)列
- 接收者在成功接收消息之后需向隊(duì)列應(yīng)答成功
- 如果希望發(fā)送的每個(gè)消息都會(huì)被成功處理的話购裙,那么需要P2P模式
2懂版、Pub/Sub模式
- 三角色:
主題Topic、發(fā)布者Publisher躏率、訂閱者Subscriber
- 特點(diǎn)
- 每個(gè)消息可以有多個(gè)消費(fèi)者
- 發(fā)布者和訂閱者之間有時(shí)間上的依賴(lài)性躯畴。針對(duì)某個(gè)主題(Topic)的訂閱者,它必須創(chuàng)建一個(gè)訂閱者之后薇芝,才能消費(fèi)發(fā)布者的消息
- 為了消費(fèi)消息蓬抄,訂閱者必須保持運(yùn)行的狀態(tài)
- 如果希望發(fā)送的消息可以不被做任何處理、或者只被一個(gè)消息者處理恩掷、或者可以被多個(gè)消費(fèi)者處理的話倡鲸,那么可以采用Pub/Sub模型
5、RabbitMQ的三種模式
單一模式黄娘、普通模式、鏡像模式(將消息隊(duì)列做成鏡像隊(duì)列克滴,存放于多個(gè)節(jié)點(diǎn)逼争,屬于HA方案∪芭猓基于普通集群模式上配置鏡像模式誓焦,實(shí)現(xiàn)高可用)
6、RabbitMQ的集群節(jié)點(diǎn)
1、內(nèi)存節(jié)點(diǎn):所有數(shù)據(jù)存儲(chǔ)在內(nèi)存
2杂伟、磁盤(pán)節(jié)點(diǎn)保存狀態(tài)到內(nèi)存和磁盤(pán)
7移层、RabbitMQ簡(jiǎn)介
基于Erlong語(yǔ)言開(kāi)發(fā),基于AMQP協(xié)議實(shí)現(xiàn)赫粥。本身不支持反正观话;支持高并發(fā)、可擴(kuò)展越平。支持AJAX频蛔、持久化,用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息
8秦叛、了解RabbitMQ
在RabbitMQ集群中晦溪,必須至少有一個(gè)磁盤(pán)節(jié)點(diǎn),否則隊(duì)列元數(shù)據(jù)無(wú)法寫(xiě)入集群中挣跋,當(dāng)磁盤(pán)節(jié)點(diǎn)宕掉時(shí)三圆,集群無(wú)法寫(xiě)入新的隊(duì)列元數(shù)據(jù)信息。
9避咆、集群重啟順序
啟動(dòng)順序:磁盤(pán)節(jié)點(diǎn)--->內(nèi)存結(jié)點(diǎn)
關(guān)閉順序:內(nèi)存節(jié)點(diǎn)--->磁盤(pán)節(jié)點(diǎn)
注意:最后關(guān)閉的一定時(shí)磁盤(pán)節(jié)點(diǎn)舟肉,否則會(huì)造成啟動(dòng)失敗、數(shù)據(jù)丟失等異常情況牌借。