RabbitMQ核心概念以及工作原理

RabbitMQ核心概念以及工作原理

我們來看看流行的RabbitMQ消息系統(tǒng)以及它是如何讓你的系統(tǒng)之間進行解耦的驱证。

英文原文

RabbitMQ

在這篇短文里将塑,我們會介紹什么是RabbitMQ缕贡,它是如何工作的以及RabbitMQ的核心概念拙绊。

RabbitMQ是一個開源的消息代理軟件刹孔。它接收生產(chǎn)者發(fā)布的消息并發(fā)送給消費者。它扮演中間商的角色丐枉,可以用來降低web服務(wù)器因發(fā)送消息帶來的負載以及延時哆键。

RabbitMQ如何工作的?

我們來簡單看看RabbitMQ是如何工作的瘦锹。

首先來看看RabbitMQ里的幾個重要概念:

  • 生產(chǎn)者(Producer):發(fā)送消息的應(yīng)用籍嘹。
  • 消費者(Consumer):接收消息的應(yīng)用。
  • 隊列(Queue):存儲消息的緩存弯院。
  • 消息(Message):由生產(chǎn)者通過RabbitMQ發(fā)送給消費者的信息辱士。
  • 連接(Connection):連接RabbitMQ和應(yīng)用服務(wù)器的TCP連接。
  • 通道(Channel):連接里的一個虛擬通道听绳。當(dāng)你通過消息隊列發(fā)送或者接收消息時颂碘,這個操作都是通過通道進行的。
  • 交換機(Exchange):交換機負責(zé)從生產(chǎn)者那里接收消息辫红,并根據(jù)交換類型分發(fā)到對應(yīng)的消息列隊里凭涂。要實現(xiàn)消息的接收,一個隊列必須到綁定一個交換機贴妻。
  • 綁定(Binding):綁定是隊列和交換機的一個關(guān)聯(lián)連接切油。
  • 路由鍵(Routing Key):路由鍵是供交換機查看并根據(jù)鍵來決定如何分發(fā)消息到列隊的一個鍵。路由鍵可以說是消息的目的地址名惩。

生產(chǎn)者(Producer)發(fā)送/發(fā)布消息到代理->消費者(Consumer)從代理那里接收消息澎胡。哪怕生產(chǎn)者和消費者運行在不同的機器上,RabbitMQ也能扮演代理中間件的角色娩鹉。

當(dāng)生產(chǎn)者發(fā)送消息時攻谁,它并不是直接把消息發(fā)送到隊列里的,而是使用交換機(Exchange)來發(fā)送弯予。下面的設(shè)計圖簡單展示了這三個主要的組件之間是如何連接起來的戚宦。

交換機代理(exchange agent)負責(zé)把消息分發(fā)到不同的隊列里。這樣的話锈嫩,消息就能夠從生產(chǎn)者發(fā)送到交換機受楼,然后被分發(fā)到消息隊列里。這就是常見的“發(fā)布”方法呼寸。

Producer

然后艳汽,消息會被消費者從隊列里讀取并消費,這就是“消費”对雪。

往多個隊列里發(fā)送消息

對一個復(fù)雜的應(yīng)用而言河狐,往往會有多個消息隊列,所以消息也會被發(fā)往多個隊列瑟捣。


Multiple queues

給帶有多個隊列的交換機發(fā)送的消息是通過綁定和路由鍵來進行分發(fā)的馋艺。綁定是你設(shè)置的用來連接一個隊列和交換機的連接。路由鍵是消息的一個屬性迈套。交換機會根據(jù)路由鍵來決定消息分發(fā)到那個隊列里(取決于交換機的類型)丈钙。

交換機(Exchange)

消息并不是直接發(fā)布到隊里里的,而是被生產(chǎn)者發(fā)送到一個交換機上交汤。交換機負責(zé)把消息發(fā)布到不同的隊列里雏赦。交換機從生產(chǎn)者應(yīng)用上接收消息,然后根據(jù)綁定和路由鍵將消息發(fā)送到對應(yīng)的隊列里芙扎。綁定是交換機和隊列之間的一個關(guān)系連接星岗。


Exchange

RabbitMQ里的消息流程

  • 生產(chǎn)者(producer)把消息發(fā)送給交換機。當(dāng)你創(chuàng)建交換機的時候戒洼,你需要指定類型俏橘。交換機的類型接下來會講到。
  • 交換機(exchange)接收消息并且負責(zé)對消息進行路由圈浇。根據(jù)交換機的類型寥掐,消息的多個屬性會被使用靴寂,例如路由鍵。
  • 綁定(binding)需要從交換機到隊列的這種方式來進行創(chuàng)建召耘。在這個例子里百炬,我們可以看到交換機有到兩個不同隊列的綁定。交換機根據(jù)消息的屬性來把消息分發(fā)到不同的隊列上污它。
  • 消息(message)消息會一直留在隊列里直到被消費剖踊。
  • 消費者(consumer)處理消息。

交換機類型

Exchange Type
  1. 直接(Direct):直接交換機通過消息上的路由鍵直接對消息進行分發(fā)衫贬。
  2. 扇出(Fanout):一個扇出交換機會將消息發(fā)送到所有和它進行綁定的隊列上德澈。
  3. 主題(Topic):這個交換機會將路由鍵和綁定上的模式進行通配符匹配。
  4. 消息頭(Headers):消息頭交換機使用消息頭的屬性進行消息路由固惯。

RabbitMQ核心概念

  • 生產(chǎn)者(Producer):發(fā)送消息的應(yīng)用梆造。
  • 消費者(Consumer):接收消息的應(yīng)用。
  • 隊列(Queue):存儲消息的緩存葬毫。
  • 消息(Message):又生產(chǎn)者通過RabbitMQ發(fā)送給消費者的信息澳窑。
  • 連接(Connection):連接RabbitMQ和應(yīng)用服務(wù)器的TCP連接。
  • 通道(Channel):連接里的一個虛擬通道供常。當(dāng)你通過消息隊列發(fā)送或者接收消息時摊聋,這個操作都是通過通道進行的。
  • 交換機(Exchange):從生產(chǎn)者那里接收消息栈暇,并根據(jù)交換類型分發(fā)到對應(yīng)的消息列隊里麻裁。要實現(xiàn)消息的接收,一個隊列必須綁定一個交換機源祈。
  • 綁定(Binding):綁定是隊列和交換機的一個鏈接煎源。
  • 路由鍵(Routing Key):路由鍵是供交換機查看并根據(jù)鍵的值來決定如何分發(fā)消息到列隊的一個鍵。路由鍵可以說是消息的目的地址香缺。
  • AMQP:AMQP(高級消息隊列協(xié)議Advanced Message Queuing Protocol)是RabbitMQ使用的消息協(xié)議手销。
  • 用戶(Users):在RabbitMQ里,是可以通過指定的用戶名和密碼來進行連接的图张。每個用戶可以分配不同的權(quán)限锋拖,例如讀權(quán)限,寫權(quán)限以及在實例里進行配置的權(quán)限祸轮。

如果你已經(jīng)熟悉了RabbitMQ的核心概念以及它的工作原理兽埃,我們接下來就可以通過下面的文章來進行實戰(zhàn)了:
RabbitMQ Java HelloWorld Example - 這篇文章會講解如何在Java里實現(xiàn)RabbitMQ的HelloWorld例子.

RabbitMQ Tutorial with Publish/Subscribe Example - 這篇文章里會講解RabbitMQ,并一步一步來搭建一個”生產(chǎn)者/消費者“的實例适袜。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柄错,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌售貌,老刑警劉巖给猾,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異颂跨,居然都是意外死亡敢伸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門毫捣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帝际,你說我怎么就攤上這事蔓同。” “怎么了蹲诀?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵斑粱,是天一觀的道長。 經(jīng)常有香客問我脯爪,道長则北,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任痕慢,我火速辦了婚禮尚揣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掖举。我一直安慰自己快骗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布塔次。 她就那樣靜靜地躺著方篮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪励负。 梳的紋絲不亂的頭發(fā)上藕溅,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音继榆,去河邊找鬼巾表。 笑死,一個胖子當(dāng)著我的面吹牛略吨,可吹牛的內(nèi)容都是我干的攒发。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼晋南,長吁一口氣:“原來是場噩夢啊……” “哼惠猿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤偶妖,失蹤者是張志新(化名)和其女友劉穎姜凄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趾访,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡态秧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扼鞋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片申鱼。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖云头,靈堂內(nèi)的尸體忽然破棺而出捐友,到底是詐尸還是另有隱情,我是刑警寧澤溃槐,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布匣砖,位于F島的核電站,受9級特大地震影響昏滴,放射性物質(zhì)發(fā)生泄漏猴鲫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一谣殊、第九天 我趴在偏房一處隱蔽的房頂上張望拂共。 院中可真熱鬧,春花似錦姻几、人聲如沸匣缘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肌厨。三九已至,卻和暖如春豁陆,著一層夾襖步出監(jiān)牢的瞬間柑爸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工盒音, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留表鳍,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓祥诽,卻偏偏與公主長得像譬圣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雄坪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359