知識(shí)要點(diǎn):
什么是消息中間件
消息中間件的作用
消息中間件歷史
JMS規(guī)范
AMQP協(xié)議
消息隊(duì)列中間件(Message Queue Middleware,簡(jiǎn)稱(chēng)為MQ)是指利用高效可靠的消息傳遞機(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)程間的通信踏堡。
目前開(kāi)源的消息中間件有很多,比較主流的有RabbitMQ恒水、Kafka会放、 ActiveMQ、 RocketMQ等钉凌。 面向消息的中間件(簡(jiǎn)稱(chēng)為MOM, Message Oriented Middleware)提供了以松散藕合的靈活方式集成應(yīng)用程序的一種機(jī)制咧最。它們提供了基于存儲(chǔ)和轉(zhuǎn)發(fā)的應(yīng)用程序之間的異步數(shù)據(jù)發(fā)送,即應(yīng)用程序彼此不直接通信,而是與作為中介的消息中間件通信御雕。消息中間件提供了有保證的消息發(fā)送矢沿,應(yīng)用程序開(kāi)發(fā)人員無(wú)須了解
遠(yuǎn)程過(guò)程調(diào)用( RPC)和網(wǎng)絡(luò)通信協(xié)議的細(xì)節(jié)。
消息中間件的作用
步, (解決不必要的阻塞) : 消息中間件提供了異步處理機(jī)制酸纲,允許應(yīng)用把一些消息放入消息中間件中捣鲸,但并不立即處理它,在之后需要的時(shí)候再慢慢處理闽坡。
解耦(降低模塊間的耦合關(guān)系) :
消息中間件在處理過(guò)程中間插入了一個(gè)隱含的摄狱、基于數(shù)據(jù)的接口層脓诡。
削峰(峰值任務(wù)的平滑處理) :
在訪問(wèn)量劇增的情況下,應(yīng)用仍然需要繼續(xù)發(fā)揮作用媒役。
冗余(存儲(chǔ)、補(bǔ)償機(jī)制) :
有些情況下宪迟,處理數(shù)據(jù)的過(guò)程會(huì)失敗酣衷。消息中間件可以把數(shù)據(jù)進(jìn)行持久化直到
它們已經(jīng)被完全處理,通過(guò)這- -方式規(guī)避了數(shù)據(jù)丟失風(fēng)險(xiǎn)次泽。
注意:
分布式消息傳遞:中間件可用性(高可用)穿仪、可靠性 (消息在傳遞過(guò)程中不會(huì)丟失)、持久化 (消息在存儲(chǔ)過(guò)程中不丟失)意荤、吞吐量啊片、 響應(yīng)時(shí)間、跨平臺(tái)玖像。
消息中間件的歷史
最早的消息中間件概念誕生是非常早的紫谷,在1983年, -個(gè)印度人提出了一個(gè)設(shè)想捐寥,設(shè)計(jì)-種軟件總線(xiàn)笤昨,提供其他程序接入,以發(fā)布訂閱的模式。后來(lái)成了TIB握恳。
IBM——> WebSphere MQ
微軟一一> MSMQ
JMS (Java Message Service)規(guī)范瞒窒,由sun公司于2001年發(fā)布, 封裝了各大廠商的消息中間件服務(wù)乡洼,提供了Java的APl崇裁。那么Java程序員就只需要面向API編程,不需要關(guān)注到底用了什么消息中間件AMQP (Advanced Message Queuing Protocol)協(xié)議束昵,2004年誕生拔稳。
JMS規(guī)范(Message Serice)
JMS (Java Message Service)規(guī)范本質(zhì)上是一套API,只適用于Java平臺(tái)的消息中間件規(guī)范妻怎,支持Java應(yīng)用程序之間進(jìn)行消息交換壳炎。并且通過(guò)提供標(biāo)準(zhǔn)的生產(chǎn)、發(fā)送逼侦、接收消息的接口簡(jiǎn)化企業(yè)應(yīng)用的開(kāi)發(fā)匿辩。
JMS對(duì)象模型包含的元素:
1、連接工廠:用于創(chuàng)建一 個(gè)JMS連接
2榛丢、JMS連接:客戶(hù)端和服務(wù)器之間的一個(gè)連接
3铲球、JMS會(huì)話(huà):客戶(hù)端和服務(wù)器端會(huì)話(huà)的狀態(tài),建立在連接之上的
4晰赞、JMS目的:消息隊(duì)列稼病,就是消息的目的地
5选侨、JMS生產(chǎn)者:生成消息
6、JMS消費(fèi)者:接收消息
7然走、Broker: 消息中間件實(shí)例
JMS消息模型
1援制、 Point-to-Point (點(diǎn)對(duì)點(diǎn))
特點(diǎn):一個(gè)消息只有一個(gè)消費(fèi)者拿到,該消息就從消息隊(duì)列中刪除芍瑞。成功拿到消息后會(huì)向隊(duì)列應(yīng)答成功晨仑,確認(rèn)接收。
2拆檬、publis/sbscribe(發(fā)布/訂閱)
訂閱者消費(fèi)特點(diǎn):
發(fā)布到Topic的消息會(huì)被當(dāng)前主題所有的訂閱者消息
AMQP協(xié)議
AMQP (Advanced Message Queuing Protocol)協(xié)議是一開(kāi)放標(biāo)準(zhǔn)洪己,支持不同語(yǔ)言的不同產(chǎn)品。
AMQP組件
生產(chǎn)者:
消息的創(chuàng)建者,將消息發(fā)送到消息中間件
消費(fèi)者:
連接到消息中間件上竟贯,訂閱在隊(duì)列上答捕,進(jìn)行消息的消費(fèi)。
消息:
包括有效載荷與標(biāo)簽屑那。有效載荷:要傳輸?shù)臄?shù)據(jù);標(biāo)簽:描述有效載荷的屬性: RabbitMQ通過(guò)標(biāo)簽決定誰(shuí)獲得該消息拱镐,消費(fèi)者只能得到有效載荷。
信道:
可理解為一個(gè)虛擬的連接齐莲,建立在真實(shí)的TCP/IP連接之上痢站。所有AMQP上的消啟都通過(guò)信道傳輸,TCP/IP連接的建立和釋放對(duì)服務(wù)器有很大的消耗选酗、昂貴的資源阵难。信道的創(chuàng)建沒(méi)有數(shù)量限制,保護(hù)資源的利用芒填。
交換器呜叫、隊(duì)列、綁定殿衰、路由鍵:
隊(duì)列通過(guò)路由鍵(routing key)綁定到交換器朱庆,生產(chǎn)者把消息發(fā)送到交換器,交換器根據(jù)綁定的路由鍵把消息路由到特定的隊(duì)列中闷祥,再由訂閱該隊(duì)列的消費(fèi)者進(jìn)行消息的消費(fèi)娱颊。
注意:
一個(gè)連接有多個(gè)信道?可以信道是連接在Broker (MQ服務(wù)器)上交換器和信道無(wú)關(guān)