RabbitMQ 即一個消息隊(duì)列,主要是用來實(shí)現(xiàn)應(yīng)用程序的異步和解耦,同時也能起到消息緩沖,消息分發(fā)的作用。

消息中間件在互聯(lián)網(wǎng)公司的使用中越來越多,剛才還看到新聞阿里將RocketMQ捐獻(xiàn)給了apache,當(dāng)然了今天的主角還是講RabbitMQ。消息中間件最主要的作用是解耦,中間件最標(biāo)準(zhǔn)的用法是生產(chǎn)者生產(chǎn)消息傳送到隊(duì)列,消費(fèi)者從隊(duì)列中拿取消息并處理,生產(chǎn)者不用關(guān)心是誰來消費(fèi),消費(fèi)者不用關(guān)心誰在生產(chǎn)消息,從而達(dá)到解耦的目的。在分布式的系統(tǒng)中,消息隊(duì)列也會被用在很多其它的方面,比如:分布式事務(wù)的支持,RPC的調(diào)用等等。

以前一直使用的是ActiveMQ,在實(shí)際的生產(chǎn)使用中也出現(xiàn)了一些小問題,在網(wǎng)絡(luò)查閱了很多的資料后,決定嘗試使用RabbitMQ來替換ActiveMQ,RabbitMQ的高可用性、高性能、靈活性等一些特點(diǎn)吸引了我們,查閱了一些資料整理出此文。

RabbitMQ介紹

RabbitMQ是實(shí)現(xiàn)AMQP(高級消息隊(duì)列協(xié)議)的消息中間件的一種,最初起源于金融系統(tǒng),用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。RabbitMQ主要是為了實(shí)現(xiàn)系統(tǒng)之間的雙向解耦而實(shí)現(xiàn)的。當(dāng)生產(chǎn)者大量產(chǎn)生數(shù)據(jù)時,消費(fèi)者無法快速消費(fèi),那么需要一個中間層。保存這個數(shù)據(jù)。

AMQP,即Advanced Message Queuing Protocol,高級消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)。消息中間件主要用于組件之間的解耦,消息的發(fā)送者無需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、隊(duì)列、路由(包括點(diǎn)對點(diǎn)和發(fā)布/訂閱)、可靠性、安全。

RabbitMQ是一個開源的AMQP實(shí)現(xiàn),服務(wù)器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。

相關(guān)概念

通常我們談到隊(duì)列服務(wù), 會有三個概念: 發(fā)消息者、隊(duì)列、收消息者,RabbitMQ 在這個基本概念之上, 多做了一層抽象, 在發(fā)消息者和 隊(duì)列之間, 加入了交換器 (Exchange). 這樣發(fā)消息者和隊(duì)列就沒有直接聯(lián)系, 轉(zhuǎn)而變成發(fā)消息者把消息給交換器, 交換器根據(jù)調(diào)度策略再把消息再給隊(duì)列。