RabbitMQ,消息中間件基礎(chǔ)當(dāng)中的AMQP協(xié)議

知識要點(diǎn):

什么是消息中間件
消息中間件的作用
消息中間件歷史
JMS規(guī)范
AMQP協(xié)議

消息隊(duì)列中間件(Message Queue Middleware,簡稱為MQ)是指利用高效可靠的消息傳遞機(jī)制進(jìn)行與平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進(jìn)行分布式系統(tǒng)的集成。通過提供消息傳遞和消息排隊(duì)模型,它可以在分布式環(huán)境下擴(kuò)展進(jìn)程間的通信。
目前開源的消息中間件有很多,比較主流的有RabbitMQ、Kafka、 ActiveMQ、 RocketMQ等。 面向消息的中間件(簡稱為MOM, Message Oriented Middleware)提供了以松散藕合的靈活方式集成應(yīng)用程序的一種機(jī)制。它們提供了基于存儲和轉(zhuǎn)發(fā)的應(yīng)用程序之間的異步數(shù)據(jù)發(fā)送,即應(yīng)用程序彼此不直接通信,而是與作為中介的消息中間件通信。消息中間件提供了有保證的消息發(fā)送,應(yīng)用程序開發(fā)人員無須了解
遠(yuǎn)程過程調(diào)用( RPC)和網(wǎng)絡(luò)通信協(xié)議的細(xì)節(jié)。


消息中間件的作用

步, (解決不必要的阻塞) : 消息中間件提供了異步處理機(jī)制,允許應(yīng)用把一些消息放入消息中間件中,但并不立即處理它,在之后需要的時(shí)候再慢慢處理。
解耦(降低模塊間的耦合關(guān)系) :消息中間件在處理過程中間插入了一個(gè)隱含的、基于數(shù)據(jù)的接口層。
削峰(峰值任務(wù)的平滑處理) :在訪問量劇增的情況下,應(yīng)用仍然需要繼續(xù)發(fā)揮作用。
冗余(存儲、補(bǔ)償機(jī)制) :有些情況下,處理數(shù)據(jù)的過程會(huì)失敗。消息中間件可以把數(shù)據(jù)進(jìn)行持久化直到
它們已經(jīng)被完全處理,通過這- -方式規(guī)避了數(shù)據(jù)丟失風(fēng)險(xiǎn)。
注意:
分布式消息傳遞:中間件可用性(高可用)、可靠性 (消息在傳遞過程中不會(huì)丟失)、持久化 (消息在存儲過程中不丟失)、吞吐量、 響應(yīng)時(shí)間、跨平臺。

消息中間件的歷史

最早的消息中間件概念誕生是非常早的,在1983年, -個(gè)印度人提出了一個(gè)設(shè)想,設(shè)計(jì)-種軟件總線,提供其他程序接入,以發(fā)布訂閱的模式。后來成了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平臺的消息中間件規(guī)范,支持Java應(yīng)用程序之間進(jìn)行消息交換。并且通過提供標(biāo)準(zhǔn)的生產(chǎn)、發(fā)送、接收消息的接口簡化企業(yè)應(yīng)用的開發(fā)。


JMS對象模型包含的元素:

1、連接工廠:用于創(chuàng)建一 個(gè)JMS連接
2、JMS連接:客戶端和服務(wù)器之間的一個(gè)連接
3、JMS會(huì)話:客戶端和服務(wù)器端會(huì)話的狀態(tài),建立在連接之上的
4、JMS目的:消息隊(duì)列,就是消息的目的地
5、JMS生產(chǎn)者:生成消息
6、JMS消費(fèi)者:接收消息
7、Broker: 消息中間件實(shí)例

JMS消息模型

1、 Point-to-Point (點(diǎn)對點(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é)議是一開放標(biāo)準(zhǔn),支持不同語言的不同產(chǎn)品。


AMQP組件

生產(chǎn)者:消息的創(chuàng)建者,將消息發(fā)送到消息中間件
消費(fèi)者:連接到消息中間件上,訂閱在隊(duì)列上,進(jìn)行消息的消費(fèi)。
消息:包括有效載荷與標(biāo)簽。有效載荷:要傳輸?shù)臄?shù)據(jù);標(biāo)簽:描述有效載荷的屬性: RabbitMQ通過標(biāo)簽決定誰獲得該消息,消費(fèi)者只能得到有效載荷。
信道:可理解為一個(gè)虛擬的連接,建立在真實(shí)的TCP/IP連接之上。所有AMQP上的消啟都通過信道傳輸,TCP/IP連接的建立和釋放對服務(wù)器有很大的消耗、昂貴的資源。信道的創(chuàng)建沒有數(shù)量限制,保護(hù)資源的利用。
交換器、隊(duì)列、綁定、路由鍵:隊(duì)列通過路由鍵(routing key)綁定到交換器,生產(chǎn)者把消息發(fā)送到交換器,交換器根據(jù)綁定的路由鍵把消息路由到特定的隊(duì)列中,再由訂閱該隊(duì)列的消費(fèi)者進(jìn)行消息的消費(fèi)。


注意:
一個(gè)連接有多個(gè)信道?可以信道是連接在Broker (MQ服務(wù)器)上交換器和信道無關(guān)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容