簡書:亞武de小文 【原創(chuàng):轉(zhuǎn)載請注明出處】
Rabbitmq簡介與架構(gòu)流程

RabbitMQ是實現(xiàn)了高級消息隊列協(xié)議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務(wù)器是用Erlang語言編寫的,而群集和故障轉(zhuǎn)移是構(gòu)建在開放電信平臺框架上的。所有主要的編程語言均有與代理接口通訊的客戶端庫。
應(yīng)用場景
- 任務(wù)異步處理。
將不需要同步處理的并且耗時長的操作由消息隊列通知消息接收方進(jìn)行異步處理。提高了應(yīng)用程序的響應(yīng)時間。 - 應(yīng)用程序解耦合
MQ相當(dāng)于一個中介,生產(chǎn)方通過MQ與消費(fèi)方交互,它將應(yīng)用程序進(jìn)行解耦合。 - 流量削峰
一般在秒殺活動中使用較多
AMQP概念
AMQP,即Advanced Message Queuing Protocol,一個提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)高級消息隊列協(xié)議,是應(yīng)用層協(xié)議的一個開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計。基于此協(xié)議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產(chǎn)品,不同的開發(fā)語言等條件的限制。Erlang中的實現(xiàn)有 RabbitMQ等。
詳見:RabbitMQ打怪升級之路(五)AMQP協(xié)議介紹
JMS概念
JMS即Java消息服務(wù)(Java Message Service)應(yīng)用程序接口,是一個Java平臺中關(guān)于面向消息中間件(MOM)的API,用于在兩個應(yīng)用程序之間,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信。Java消息服務(wù)是一個與具體平臺無關(guān)的API,絕大多數(shù)MOM提供商都對JMS提供支持。
主要特性
1、可靠性 :
RabbitMQ 使用一些機(jī)制來保證可靠性 , 如持久化、傳輸確認(rèn)及發(fā)布確認(rèn)等。
2、靈活的路由 :
在消息進(jìn)入隊列之前,通過交換器來路由消息。對于典型的路由功能,RabbitMQ 己經(jīng)提供了一些內(nèi)置的交換器來實現(xiàn)。針對更復(fù)雜的路由功能,可以將多個交換器綁定在一起, 也可以通過插件機(jī)制來實現(xiàn)自己的交換器。
3、擴(kuò)展性 :
多個 RabbitMQ 節(jié)點可以組成一個集群,也可以根據(jù)實際業(yè)務(wù)情況動態(tài)地擴(kuò)展集群中節(jié)點。
4、高可用性 :
隊列可以在集群中的機(jī)器上設(shè)置鏡像,使得在部分節(jié)點出現(xiàn)問題的情況下隊列仍然可用。
5、多種協(xié)議 :
RabbitMQ 除了原生支持 AMQP 協(xié)議,還支持 STOMP , MQTT 等多種消息中間件協(xié)議。
6、多語言客戶端 :
Rabbitmq幾乎支持所有常用語言,比如 Java、 Python 、 Ruby、 PHP 、C# 、 JavaScript 等。
7、管理界面 :
RabbitMQ 提供了一個易用的用戶界面,使得用戶可以監(jiān)控和管理消息、集群中的節(jié)點等。
8、插件機(jī)制:
RabbitMQ 提供了許多插件 , 以實現(xiàn)從多方面進(jìn)行擴(kuò)展,當(dāng)然也可以編寫自己的插件。
架構(gòu)圖及名詞解釋

- 生產(chǎn)者(Producer):發(fā)送消息的應(yīng)用。
- 消費(fèi)者(Consumer):接收消息的應(yīng)用。
- 隊列(Queue):存儲消息的緩存。
- 消息(Message):由生產(chǎn)者通過RabbitMQ發(fā)送給消費(fèi)者的信息。
- 連接(Connection):連接RabbitMQ和應(yīng)用服務(wù)器的TCP連接。
- 通道(Channel):連接里的一個虛擬通道。當(dāng)你通過消息隊列發(fā)送或者接收消息時,這個操作都是通過通道進(jìn)行的。
- 交換機(jī)(Exchange):交換機(jī)負(fù)責(zé)從生產(chǎn)者那里接收消息,并根據(jù)交換類型分發(fā)到對應(yīng)的消息列隊里。要實現(xiàn)消息的接收,一個隊列必須到綁定一個交換機(jī)。
- 綁定(Binding):綁定是隊列和交換機(jī)的一個關(guān)聯(lián)連接。
- 路由鍵(Routing Key):路由鍵是供交換機(jī)查看并根據(jù)鍵來決定如何分發(fā)消息到列隊的一個鍵。路由鍵可以說是消息的目的地址。
消息發(fā)布接收流程:
發(fā)送消息
1、生產(chǎn)者和Broker建立TCP連接。
2、生產(chǎn)者和Broker建立通道。
3、生產(chǎn)者通過通道消息發(fā)送給Broker,由Exchange將消息進(jìn)行轉(zhuǎn)發(fā)。
4、Exchange將消息轉(zhuǎn)發(fā)到指定的Queue(隊列)接收消息
1、消費(fèi)者和Broker建立TCP連接
2、消費(fèi)者和Broker建立通道
3、消費(fèi)者監(jiān)聽指定的Queue(隊列)
4、當(dāng)有消息到達(dá)Queue時Broker默認(rèn)將消息推送給消費(fèi)者。
5、消費(fèi)者接收到消息。