rabbitmq簡(jiǎn)介

特點(diǎn)

RabbitMQ是一款使用Erlang語(yǔ)言開(kāi)發(fā)的柠座,實(shí)現(xiàn)AMQP(高級(jí)消息隊(duì)列協(xié)議)的開(kāi)源消息中間件,特點(diǎn)如下:

  • 可靠性:支持持久化,傳輸確認(rèn)浩销,發(fā)布確認(rèn)等保證了MQ的可靠性
  • 靈活的分發(fā)消息策略:RabbitMQ的一大特點(diǎn),在消息進(jìn)入MQ前由Exchange(交換機(jī))進(jìn)行路由消息(分發(fā)消息策略有:簡(jiǎn)單模式听哭、工作隊(duì)列模式慢洋、發(fā)布訂閱模式、路由模式陆盘、通配符模式)
  • 支持集群:多臺(tái)RabbitMQ服務(wù)器可以組成一個(gè)集群普筹,形成一個(gè)邏輯Broker。
  • 多種協(xié)議:RabbitMQ支持多種消息隊(duì)列協(xié)議隘马,比如 STOMP太防、MQTT 等等。
  • 支持多種語(yǔ)言客戶端:RabbitMQ幾乎支持所有常用編程語(yǔ)言酸员,包括 Java蜒车、.NET、Ruby 等等幔嗦。
  • 可視化管理界面:RabbitMQ提供了一個(gè)易用的用戶界面酿愧,使得用戶可以監(jiān)控和管理消息 Broker。
  • 插件機(jī)制:RabbitMQ提供了許多插件崭添,可以通過(guò)插件進(jìn)行擴(kuò)展寓娩,也可以編寫自己的插件。


    簡(jiǎn)介

組件

  • 生產(chǎn)者(Producer):發(fā)送消息的應(yīng)用呼渣。
  • 消費(fèi)者(Consumer):接收消息的應(yīng)用棘伴。
  • 隊(duì)列(Queue):存儲(chǔ)消息的緩存。
  • 消息(Message):由生產(chǎn)者通過(guò)RabbitMQ發(fā)送給消費(fèi)者的信息屁置。
  • 連接(Connection):連接RabbitMQ和應(yīng)用服務(wù)器的TCP連接焊夸。
  • 通道(Channel):連接里的一個(gè)虛擬通道。當(dāng)你通過(guò)消息隊(duì)列發(fā)送或者接收消息時(shí)蓝角,這個(gè)操作都是通過(guò)通道進(jìn)行的阱穗。
  • 交換機(jī)(Exchange):交換機(jī)負(fù)責(zé)從生產(chǎn)者那里接收消息,并根據(jù)交換類型分發(fā)到對(duì)應(yīng)的消息列隊(duì)里使鹅。要實(shí)現(xiàn)消息的接收揪阶,一個(gè)隊(duì)列必須到綁定一個(gè)交換機(jī)。
  • 綁定(Binding):綁定是隊(duì)列和交換機(jī)的一個(gè)關(guān)聯(lián)連接患朱。
  • 路由鍵(Routing Key):路由鍵是供交換機(jī)查看并根據(jù)鍵來(lái)決定如何分發(fā)消息到列隊(duì)的一個(gè)鍵鲁僚。路由鍵可以說(shuō)是消息的目的地址。

消息六種發(fā)送模式

生產(chǎn)者(Producer)發(fā)送->中間件->消費(fèi)者(Consumer)接收消息。

1冰沙、簡(jiǎn)單隊(duì)列

1)生產(chǎn)者將消息發(fā)送到隊(duì)列侨艾,消費(fèi)者從隊(duì)列獲取消息。
2)一個(gè)隊(duì)列對(duì)應(yīng)一個(gè)消費(fèi)者拓挥。


簡(jiǎn)單隊(duì)列

2唠梨、工作隊(duì)列

1)一個(gè)生產(chǎn)者,多個(gè)消費(fèi)者
2)一個(gè)消息發(fā)送到隊(duì)列時(shí)侥啤,只能被一個(gè)消費(fèi)者消費(fèi)
3)多個(gè)消費(fèi)者并行處理消息当叭,提升消息處理數(shù)據(jù)


工作隊(duì)列

3、發(fā)布/訂閱模式(Publish/Subcribe)

將消息發(fā)送到交換機(jī)愿棋,隊(duì)列從交換機(jī)獲取消息科展,隊(duì)列需要綁定到交換機(jī)。
1)一個(gè)生產(chǎn)者糠雨,多個(gè)消費(fèi)者
2)每個(gè)消費(fèi)者都有自己的隊(duì)列
3)生產(chǎn)者把消息發(fā)送到交換機(jī)(exchange)才睹,由交換機(jī)分發(fā)到隊(duì)列
4)交換機(jī)類型為“fanout”


發(fā)布/訂閱模式

4、路由模式(Routing)

路由模式是發(fā)布/訂閱模式的一種特殊情況
1)路由模式的交換機(jī)類型為“direct”
2)綁定隊(duì)列到交換機(jī)時(shí)指定 key甘邀,即路由鍵琅攘,一個(gè)隊(duì)列可以指定多個(gè)路由鍵
3)生產(chǎn)者發(fā)送消息時(shí)指定路由鍵,消息只會(huì)發(fā)送到綁定的key的對(duì)應(yīng)隊(duì)列中


路由模式

5松邪、主題模式(Topic)

1)將路由鍵和某模式進(jìn)行匹配
2)符號(hào)“#”匹配一個(gè)或多個(gè)詞坞琴,“*”匹配不多不少一個(gè)詞
3)綁定隊(duì)列到交換機(jī)指定key時(shí),進(jìn)行通配符模式匹配


主題模式

6逗抑、RPC模式

1)對(duì)于RPC請(qǐng)求剧辐,客戶端發(fā)送一條帶有兩個(gè)屬性的消息:replyTo--設(shè)置為僅為請(qǐng)求創(chuàng)建的匿名獨(dú)占隊(duì)列;correlationId--設(shè)置為每個(gè)請(qǐng)求的唯一id值
2)請(qǐng)求被發(fā)送到rpc_queue隊(duì)列
3)RPC工作進(jìn)程(即:服務(wù)器)在隊(duì)列上等待請(qǐng)求邮府。當(dāng)一個(gè)請(qǐng)求出現(xiàn)時(shí)荧关,它執(zhí)行任務(wù),并使用replyTo字段中的隊(duì)列將結(jié)果發(fā)回客戶機(jī)
4)客戶機(jī)在回應(yīng)消息隊(duì)列上等待數(shù)據(jù)。當(dāng)消息出現(xiàn)時(shí)褂傀,它檢查correlationId屬性忍啤。如果匹配請(qǐng)求中的值,則向程序返回該響應(yīng)數(shù)據(jù)


RPC模式

rabbitmq的四種交換機(jī)

有4種不同的交換機(jī)類型:

  • 直連交換機(jī):Direct exchange
  • 扇形交換機(jī):Fanout exchange
  • 主題交換機(jī):Topic exchange
  • 首部交換機(jī):Headers exchange

1仙辟、扇形交換機(jī)

  • 扇形交換機(jī)是最基本的交換機(jī)類型同波,它所能做的事情非常簡(jiǎn)單———廣播消息。
  • 扇形交換機(jī)會(huì)把能接收到的消息全部發(fā)送給綁定在自己身上的隊(duì)列叠国。

2未檩、直連交換機(jī)

直連交換機(jī)是一種帶路由功能的交換機(jī),一個(gè)隊(duì)列會(huì)和一個(gè)交換機(jī)綁定粟焊,除此之外再綁定一個(gè)routing_key冤狡,當(dāng)消息被發(fā)送的時(shí)候校赤,需要指定一個(gè)binding_key,這個(gè)消息被送達(dá)交換機(jī)的時(shí)候筒溃,就會(huì)被這個(gè)交換機(jī)送到指定的隊(duì)列里面去。同樣的一個(gè)binding_key也是支持應(yīng)用到多個(gè)隊(duì)列中的沾乘。

3怜奖、主題交換機(jī)

  • 發(fā)送到主題交換機(jī)上的消息需要攜帶指定規(guī)則的routing_key,主題交換機(jī)會(huì)根據(jù)這個(gè)規(guī)則將數(shù)據(jù)發(fā)送到對(duì)應(yīng)的(多個(gè))隊(duì)列上翅阵。
  • 主題交換機(jī)的routing_key需要有一定的規(guī)則歪玲,交換機(jī)和隊(duì)列的binding_key需要采用.#......的格式,每個(gè)部分用.分開(kāi)掷匠,其中:
    "*"表示一個(gè)單詞
    "#"表示任意數(shù)量(零個(gè)或多個(gè))單詞

4滥崩、首部交換機(jī)

  • 定義一個(gè)Hash的數(shù)據(jù)結(jié)構(gòu),消息發(fā)送的時(shí)候讹语,會(huì)攜帶一組hash數(shù)據(jù)結(jié)構(gòu)的信息钙皮,當(dāng)Hash的內(nèi)容匹配上的時(shí)候,消息就會(huì)被寫入隊(duì)列
  • 綁定交換機(jī)和隊(duì)列的時(shí)候顽决,Hash結(jié)構(gòu)中要求攜帶一個(gè)鍵“x-match”短条,這個(gè)鍵的Value可以是any或者all,這代表消息攜帶的Hash是需要全部匹配(all)才菠,還是僅匹配一個(gè)鍵(any)就可以了茸时。相比直連交換機(jī),首部交換機(jī)的優(yōu)勢(shì)是匹配的規(guī)則不被限定為字符串(string)

rabbitmq四種集群部署架構(gòu)

1赋访、主備模式

一個(gè)主/備方案可都,主節(jié)點(diǎn)提供讀寫,備用節(jié)點(diǎn)不提供讀寫蚓耽。如果主節(jié)點(diǎn)掛了渠牲,就切換到備用節(jié)點(diǎn),原來(lái)的備用節(jié)點(diǎn)升級(jí)為主節(jié)點(diǎn)提供讀寫服務(wù)田晚,當(dāng)原來(lái)的主節(jié)點(diǎn)恢復(fù)運(yùn)行后嘱兼,原來(lái)的主節(jié)點(diǎn)就變成備用節(jié)點(diǎn),和 activeMQ 利用 zookeeper 做主/備一樣贤徒,也可以一主多備芹壕。
Warren (兔子窩) 模式。實(shí)現(xiàn) rabbitMQ 的高可用集群接奈,一般在并發(fā)和數(shù)據(jù)量不高的情況下踢涌,這種模式非常的好用且簡(jiǎn)單

主備模式

2、遠(yuǎn)程模式

遠(yuǎn)程模式可以實(shí)現(xiàn)雙活的一種模式序宦,簡(jiǎn)稱 shovel 模式睁壁,所謂的 shovel 就是把消息進(jìn)行不同數(shù)據(jù)中心的復(fù)制工作,可以跨地域的讓兩個(gè) MQ 集群互聯(lián),遠(yuǎn)距離通信和復(fù)制潘明。

3行剂、鏡像模式(常用)

  • 集群模式非常經(jīng)典的就是Mirror鏡像模式,保證100%數(shù)據(jù)不丟失钳降,在實(shí)際工作中用的最多的
  • Mirror鏡像隊(duì)列厚宰,目的是為了保證rabbitmq數(shù)據(jù)的高可靠性解決方案,主要就是實(shí)現(xiàn)數(shù)據(jù)的同步遂填,一般來(lái)講是2-3個(gè)實(shí)現(xiàn)數(shù)據(jù)同步(對(duì)于100%數(shù)據(jù)可靠性解決方案一般是3個(gè)節(jié)點(diǎn))集群架構(gòu)如下:


    鏡像模式

4铲觉、多活模式

這種模式也是實(shí)現(xiàn)異地?cái)?shù)據(jù)復(fù)制的主流模式,因?yàn)镾hovel模式配置比較復(fù)雜吓坚,所以一般來(lái)說(shuō)實(shí)現(xiàn)異地集群都是使用雙活或者多活模式來(lái)實(shí)現(xiàn)的撵幽。這種模式需要依賴rabbitmq的federation插件,可以實(shí)現(xiàn)繼續(xù)的可靠AMQP數(shù)據(jù)通信礁击,多活模式在實(shí)際配置與應(yīng)用非常的簡(jiǎn)單盐杂。

多活模式

主備模式和主從模式的區(qū)別:
主備模式:主節(jié)點(diǎn)提供讀寫,從節(jié)點(diǎn)不提供讀寫服務(wù)哆窿,只是負(fù)責(zé)提供備份服務(wù),備份節(jié)點(diǎn)的主要功能是在主節(jié)點(diǎn)宕機(jī)時(shí)况褪,完成自動(dòng)切換 從-->主
主從模式:主節(jié)點(diǎn)提供讀寫,從節(jié)點(diǎn)只讀


消息冪等性(重復(fù)消費(fèi))

同kafka一樣更耻,消息隊(duì)列本身無(wú)法保證冪等性测垛,以下是解決思路:
1)redis:消費(fèi)數(shù)據(jù)后把消息的唯一鍵存到redis中嫉到,每次消費(fèi)的時(shí)候去redis查一下key是否存在
2)mysql:消費(fèi)數(shù)據(jù)后把消息的唯一鍵存到mysql中鸯绿,每次消費(fèi)的時(shí)候查mysql


數(shù)據(jù)丟失

  • 生產(chǎn)者:可通過(guò)開(kāi)啟事務(wù)解決數(shù)據(jù)丟失問(wèn)題
    1)事務(wù)模式txSelect()、txCommit()與txRollback()
    2)confirm模式
  • rabbitmq:消息持久化
  • 消費(fèi)者:手動(dòng)ack

順序性

當(dāng)一個(gè)queue對(duì)應(yīng)多個(gè)消費(fèi)者時(shí)才會(huì)順序錯(cuò)亂合砂,只要保證一個(gè)queue對(duì)應(yīng)一個(gè)consumer即可保證順序性

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末目胡,一起剝皮案震驚了整個(gè)濱河市锯七,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌誉己,老刑警劉巖眉尸,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巨双,居然都是意外死亡噪猾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門筑累,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)袱蜡,“玉大人,你說(shuō)我怎么就攤上這事慢宗∑阂希” “怎么了奔穿?”我有些...
    開(kāi)封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)敏晤。 經(jīng)常有香客問(wèn)我贱田,道長(zhǎng),這世上最難降的妖魔是什么嘴脾? 我笑而不...
    開(kāi)封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任湘换,我火速辦了婚禮,結(jié)果婚禮上统阿,老公的妹妹穿的比我還像新娘。我一直安慰自己筹我,他們只是感情好扶平,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蔬蕊,像睡著了一般结澄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岸夯,一...
    開(kāi)封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天麻献,我揣著相機(jī)與錄音,去河邊找鬼猜扮。 笑死勉吻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旅赢。 我是一名探鬼主播齿桃,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼煮盼!你這毒婦竟也來(lái)了短纵?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤僵控,失蹤者是張志新(化名)和其女友劉穎香到,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體报破,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悠就,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了充易。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片理卑。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蔽氨,靈堂內(nèi)的尸體忽然破棺而出藐唠,到底是詐尸還是另有隱情帆疟,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布宇立,位于F島的核電站踪宠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妈嘹。R本人自食惡果不足惜柳琢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望润脸。 院中可真熱鬧柬脸,春花似錦、人聲如沸毙驯。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)爆价。三九已至垦巴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铭段,已是汗流浹背骤宣。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留序愚,地道東北人憔披。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像爸吮,于是被迫代替她去往敵國(guó)和親活逆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容