RabbitMQ 即一個消息隊列,主要是用來實現(xiàn)應(yīng)用程序的異步和解耦,同時也能起到消息緩沖,消息分發(fā)的作用。
消息中間件在互聯(lián)網(wǎng)公司的使用中越來越多,剛才還看到新聞阿里將RocketMQ捐獻給了apache,當然了今天的主角還是講RabbitMQ。消息中間件最主要的作用是解耦,中間件最標準的用法是生產(chǎn)者生產(chǎn)消息傳送到隊列,消費者從隊列中拿取消息并處理,生產(chǎn)者不用關(guān)心是誰來消費,消費者不用關(guān)心誰在生產(chǎn)消息,從而達到解耦的目的。在分布式的系統(tǒng)中,消息隊列也會被用在很多其它的方面,比如:分布式事務(wù)的支持,RPC的調(diào)用等等。
以前一直使用的是ActiveMQ,在實際的生產(chǎn)使用中也出現(xiàn)了一些小問題,在網(wǎng)絡(luò)查閱了很多的資料后,決定嘗試使用RabbitMQ來替換ActiveMQ,RabbitMQ的高可用性、高性能、靈活性等一些特點吸引了我們,查閱了一些資料整理出此文。
RabbitMQ介紹
RabbitMQ是實現(xiàn)AMQP(高級消息隊列協(xié)議)的消息中間件的一種,最初起源于金融系統(tǒng),用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴展性、高可用性等方面表現(xiàn)不俗。RabbitMQ主要是為了實現(xiàn)系統(tǒng)之間的雙向解耦而實現(xiàn)的。當生產(chǎn)者大量產(chǎn)生數(shù)據(jù)時,消費者無法快速消費,那么需要一個中間層。保存這個數(shù)據(jù)。
AMQP,即Advanced Message Queuing Protocol,高級消息隊列協(xié)議,是應(yīng)用層協(xié)議的一個開放標準,為面向消息的中間件設(shè)計。消息中間件主要用于組件之間的解耦,消息的發(fā)送者無需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布/訂閱)、可靠性、安全。
RabbitMQ是一個開源的AMQP實現(xiàn),服務(wù)器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴展性、高可用性等方面表現(xiàn)不俗。
相關(guān)概念
通常我們談到隊列服務(wù), 會有三個概念: 發(fā)消息者、隊列、收消息者,RabbitMQ 在這個基本概念之上, 多做了一層抽象, 在發(fā)消息者和 隊列之間, 加入了交換器 (Exchange). 這樣發(fā)消息者和隊列就沒有直接聯(lián)系, 轉(zhuǎn)而變成發(fā)消息者把消息給交換器, 交換器根據(jù)調(diào)度策略再把消息再給隊列。