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

消息中間件的作用
- 異步(解決不必要的阻塞) :消息中間件提供了異步處理機制,允許應(yīng)用把一些消息放入消息中間件中,但并不立即處理它,在之后需要的時候再慢慢處理。
- 解耦(降低模塊間的耦合關(guān)系) :消息中間件在處理過程中間插入了-一個隱含的、基于數(shù)據(jù)的接口層。
- 削峰(峰值任務(wù)的平滑處理) :在訪問量劇增的情況下,應(yīng)用仍然需要繼續(xù)發(fā)揮作用。
- 冗余(存儲、補償機制) :有些情況下,處理數(shù)據(jù)的過程會失敗。消息中間件可以把數(shù)據(jù)進行持久化直到它們已經(jīng)被完全處理,通過這- -方式規(guī)避了數(shù)據(jù)丟失風險。
注意:
分布式消息傳遞:中間件可用性(高可用)、可靠性 (消息在傳遞過程中不會丟失)、持久化 (消息在存儲過程中不丟失)、吞吐量、 響應(yīng)時間、跨平臺。
消息中間件的歷史
最早的消息中間件概念誕生是非常早的,在1983年,一個印度人提出了一個設(shè)想,設(shè)計一種軟件總線,提供其他程序接入,以發(fā)布訂閱的模式。后來成了TIB。IBM-- > WebSphere MQ微軟一一> MSMQJMS (Java Message Service)規(guī)范,由sun公司于2001年發(fā)布,封裝了各大廠商的消息中間件服務(wù),提供了Java的APl。那么Java程序員就只需要面向API編程,不需要關(guān)注到底用了什么消息中間件了。AMQP (Advanced Message Queuing Protocol)協(xié)議,2004年誕生。
JMS規(guī)范
JMS (Java Message Service)規(guī)范本質(zhì)上是一套API, 只適用于Java平臺的消息中間件規(guī)范,支持Java應(yīng)用程序之間進行消息交換。并且通過提供標準的生產(chǎn)、發(fā)送、接收消息的接口簡化企業(yè)應(yīng)用的開發(fā)。

JMS對象模型包含的元素:
1、連接工廠:用于創(chuàng)建一個IMS連接
2、JMS連接:客戶端和服務(wù)器之間的一一個連接
3、JMS會話:客戶端和服務(wù)器端會話的狀態(tài),建立在連接之上的
4、JMS目的:消息隊列,就是消息的目的地
5、JMS生產(chǎn)者:生成消息
6、JMS消費者:接收消息
7、Broker: 消息中間件實例
JMS消息模型
Point-to-Point (點對點)
特點:一個消息只有一個消費者拿到,該消息就從消息隊列中刪除。成功拿到消息后會向隊列應(yīng)答成功,確認接收。

Publish/Subscribe (發(fā)布/訂閱)
特點:發(fā)布到Topic的消息會被當前主題所有的訂閱者消費

AMQP協(xié)議
AMQP (Advanced Message Queuing Protocol)協(xié)議是開放標準,支持不同語言的不同產(chǎn)品。

AMQP組件
- 生產(chǎn)者:消息的創(chuàng)建者,將消息發(fā)送到消息中間件
- 消費者:連接到消息中間件上,訂閱在隊列上,進行消息的消費。
- 消息:包括有效載荷與標簽。
- 有效載荷:要傳輸?shù)臄?shù)據(jù);
- 標簽:描述有效載荷的屬性: RabbitMQ通過標簽決定誰獲得該消息,消費者只能得到有效載荷。
- 信道:可理解為-個虛擬的連接,建立在真實的TCP/IP連接之上。所有AMQP上的消息都通過信道傳輸,TCP/IP連接的建立和釋放對服務(wù)器有很大的消耗、昂貴的資源。信道的創(chuàng)建沒有數(shù)量限制,保護資源的利用。
交換器、隊列、綁定、路由鍵:隊列通過路由鍵(routing key)綁定到交換器,生產(chǎn)者把消息發(fā)送到交換器,交換器根據(jù)綁定的路由鍵把消息路由到特定的隊列中,再由訂閱該隊列的消費者進行消息的消費。
注意:
①一個連接有多個信道?可以
②信道是連接在Broker (MQ服務(wù)器)上交換器和信道無關(guān)
RabbitMQ簡介
RabbitMQ是目前非常熱門的一款消息中間件,不管是互聯(lián)網(wǎng)行業(yè)還是傳統(tǒng)行業(yè)都在大量地使用。
RabbitMQ憑借其高可靠、易擴展、高可用及豐富的功能特性受到越來越多企業(yè)的青睞。
RabbitMQ特性:
- 消息確認機制
- 隊列、消息持久化
- 消息拒收
- 默認交換器
- mandatory(防止丟失)
RabbitMQ安裝
- 安裝Erlang
2.下載RabbitMQ安裝包
3.安裝RabbitMQ
4.啟動運行
5.創(chuàng)建賬號
6.防火墻設(shè)置
注意: RabbitMQ安裝最主要的麻煩是Erlang與RbitMQ的版本-定要對應(yīng)。 考:http://rabbitmq.om/which-erang.html
