RabbitMQ是最廣泛部署的開(kāi)源消息隊(duì)列。是輕量級(jí)的應(yīng)用妈经,支持分布式和聯(lián)合配置以滿足高擴(kuò)展锻全、高可用性的需求。
一、特性
異步消息:支持多種消息協(xié)議了嚎、消息隊(duì)列歪泳、發(fā)送確認(rèn)呐伞、彈性路由伶氢、多種交換類(lèi)型癣防。
開(kāi)發(fā)者經(jīng)驗(yàn):可與BOSH, Chef, Docker and Puppet進(jìn)行部署蕾盯,支持多種開(kāi)發(fā)語(yǔ)言Java, .NET, PHP, Python, JavaScript, Ruby, Go等级遭。
分布式部署:集群部署高可用性及吞吐量,聯(lián)合(federate)部署可跨區(qū)域挫鸽。
支持企業(yè)及云:插件式的身份認(rèn)證及授權(quán)靠娱,支持TlS和LDAP
工具及插件:多種工具及插件支持持續(xù)整合掠兄、操作矩陣和與其他企業(yè)應(yīng)用進(jìn)行整合。
管理和監(jiān)控:提供HTTP-api蚂夕、命令行工具及界面來(lái)管理和監(jiān)控Rabbitmq
二迅诬、下載及安裝
- 以windows7為例子:
1.RabbitMq是基于Erlang平臺(tái)婿牍,需先安裝Erlang侈贷。下載64位版http://www.erlang.org/downloads。以管理員身份進(jìn)行安裝
2.下載windows版本:http://www.rabbitmq.com/download.html等脂。
3.進(jìn)行安裝,安裝完后rabbitmq已經(jīng)啟動(dòng)上遥,使用默認(rèn)的配置以windows服務(wù)的形式啟動(dòng)粉楚。
命令行工具在Rabbitmq安裝目錄的Sbin中伟骨,有rabbitmqctl:管理消息隊(duì)列,
如重啟節(jié)點(diǎn):rabbitmqctl reset携狭,
查看狀態(tài):rabbitmqctl status等稀并;
rabbitmq-plugins:管理消息隊(duì)列插件;
rabbitmq-server:?jiǎn)?dòng)mq服務(wù)鳄逾;
rabbitmq-service:管理windows的rabbitmq服務(wù)稻轨;
rabbitmq-echopid:返會(huì)windows中rabbitmq的進(jìn)程id
安裝完后,進(jìn)入cmd窗口運(yùn)行:rabbitmqctl status驗(yàn)證是否安裝成功雕凹。
- 可能出現(xiàn)的問(wèn)題:please check the Erlang Cookie的問(wèn)題
解決方法:將cookie從c:/windows/.erlang.cookie復(fù)制到c:/user/royal/.erlang.cookie(synchronise Erlang cookies (when running a manually service))殴俱。
安裝插件:rabbitmq_plugins enable rabbitmq_management,啟用管理插件枚抵,可通過(guò)http://127.0.0.1:15672訪問(wèn)线欲。默認(rèn)用戶、密碼guest/guest汽摹。
三李丰、開(kāi)始新手入門(mén)
rabbitmq支持多種協(xié)議,本次將使用AMQP 0-9-1協(xié)議逼泣,依賴lib文件(SLF4J APIandSLF4J Simple)趴泌,也可使用Logback
術(shù)語(yǔ):
1、producer 消息發(fā)送者
2拉庶、queue rabbitmq中的郵箱
3嗜憔、consumer 消息接受者
4、exchange:消息交換器(郵局)(有定義好的交換類(lèi)型fanout氏仗、direction吉捶、topic、headers)
5皆尔、binding:綁定呐舔,將交換器和隊(duì)列相關(guān)聯(lián)
6、connection 網(wǎng)絡(luò)鏈接
7慷蠕、channel:信道珊拼,
8、broker:中間人砌们。表示消息隊(duì)列服務(wù)器實(shí)體
work queue:避免了立即執(zhí)行完資源緊張任務(wù)和必須等待完成的任務(wù)杆麸。Round-robin分發(fā)搁进,循環(huán)輪流發(fā)送浪感,可并行執(zhí)行任務(wù)昔头。
消息確認(rèn),默認(rèn)是開(kāi)啟的影兽,消費(fèi)者發(fā)送確認(rèn)給mq揭斧,mq收到后可刪除已確認(rèn)的消息。
消息持久化峻堰,當(dāng)queue crash時(shí)讹开,將隊(duì)列里的消息持久化到磁盤(pán),需設(shè)置queue和message都為持久化捐名。
公平分發(fā)旦万,使用basic.qos方法設(shè)置prefetch_count=1。新消息不會(huì)分發(fā)給正在處理消息镶蹋,未確認(rèn)的節(jié)點(diǎn)成艘。
發(fā)布/訂閱:發(fā)送一條消息給多個(gè)接收者,exchange使用fanout模式贺归,將消息廣播給全部隊(duì)列
臨時(shí)隊(duì)列:非持久淆两、獨(dú)占、自動(dòng)刪除拂酣、自動(dòng)生成的隊(duì)列
exchange:direct模式秋冰,消息中的路由鍵(routing key)和binding key一致,交換器將消息發(fā)送到對(duì)應(yīng)隊(duì)列婶熬。完全匹配剑勾,單播模式
exchange:topic模式,交換器通過(guò)模式匹配分發(fā)消息的路由鍵屬性赵颅。通配符:#代表0個(gè)或多個(gè)鍵虽另;*代表一個(gè)關(guān)鍵字。
RabbitMq集群部署
單機(jī)集群部署遇到問(wèn)題性含,節(jié)點(diǎn)啟動(dòng)后無(wú)法重啟洲赵,加入集群