RabbitMQ.Kafka.MQ

Rabbitmq基本原理

image.png

MQ全稱為Message Queue, 是一種分布式應用程序的的通信方法,它是消費-生產(chǎn)者模型的一個典型的代表,producer往消息隊列中不斷寫入消息,而另一端consumer則可以讀取或者訂閱隊列中的消息。RabbitMQ是MQ產(chǎn)品的典型代表,是一款基于AMQP協(xié)議可復用的企業(yè)消息系統(tǒng)。業(yè)務上,可以實現(xiàn)服務提供者和消費者之間的數(shù)據(jù)解耦,提供高可用性的消息傳輸機制,在實際生產(chǎn)中應用相當廣泛。本文意在介紹Rabbitmq的基本原理,包括rabbitmq基本框架,概念,通信過程等。
系統(tǒng)架構(gòu)
Rabbitmq系統(tǒng)最核心的組件是Exchange和Queue,下圖是系統(tǒng)簡單的示意圖。Exchange和Queue是在rabbitmq server(又叫做broker)端,producer和consumer在應用端。



producer&Consumer
producer指的是消息生產(chǎn)者,consumer消息的消費者。
Queue
消息隊列,提供了FIFO的處理機制,具有緩存消息的能力。rabbitmq中,隊列消息可以設置為持久化,臨時或者自動刪除。
設置為持久化的隊列,queue中的消息會在server本地硬盤存儲一份,防止系統(tǒng)crash,數(shù)據(jù)丟失
設置為臨時隊列,queue中的數(shù)據(jù)在系統(tǒng)重啟之后就會丟失
設置為自動刪除的隊列,當不存在用戶連接到server,隊列中的數(shù)據(jù)會被自動刪除

Exchange
Exchange類似于數(shù)據(jù)通信網(wǎng)絡中的交換機,提供消息路由策略。rabbitmq中,producer不是通過信道直接將消息發(fā)送給queue,而是先發(fā)送給Exchange。一個Exchange可以和多個Queue進行綁定,producer在傳遞消息的時候,會傳遞一個ROUTING_KEY,Exchange會根據(jù)這個ROUTING_KEY按照特定的路由算法,將消息路由給指定的queue。和Queue一樣,Exchange也可設置為持久化,臨時或者自動刪除。
Exchange有4種類型:direct(默認),fanout, topic, 和headers,不同類型的Exchange轉(zhuǎn)發(fā)消息的策略有所區(qū)別:
Direct直接交換器,工作方式類似于單播,Exchange會將消息發(fā)送完全匹配ROUTING_KEY的Queue

fanout廣播是式交換器,不管消息的ROUTING_KEY設置為什么,Exchange都會將消息轉(zhuǎn)發(fā)給所有綁定的Queue。

topic主題交換器,工作方式類似于組播,Exchange會將消息轉(zhuǎn)發(fā)和ROUTING_KEY匹配模式相同的所有隊列,比如,ROUTING_KEY為user.stock的Message會轉(zhuǎn)發(fā)給綁定匹配模式為 * .stock,user.stock, * . * 和#.user.stock.#的隊列。( * 表是匹配一個任意詞組,#表示匹配0個或多個詞組)

headers消息體的header匹配(ignore)

Binding
所謂綁定就是將一個特定的 Exchange 和一個特定的 Queue 綁定起來。Exchange 和Queue的綁定可以是多對多的關系。
virtual host
在rabbitmq server上可以創(chuàng)建多個虛擬的message broker,又叫做virtual hosts (vhosts)。每一個vhost本質(zhì)上是一個mini-rabbitmq server,分別管理各自的exchange,和bindings。vhost相當于物理的server,可以為不同app提供邊界隔離,使得應用安全的運行在不同的vhost實例上,相互之間不會干擾。producer和consumer連接rabbit server需要指定一個vhost。
通信過程
假設P1和C1注冊了相同的Broker,Exchange和Queue。P1發(fā)送的消息最終會被C1消費。基本的通信流程大概如下所示:
P1生產(chǎn)消息,發(fā)送給服務器端的Exchange
Exchange收到消息,根據(jù)ROUTINKEY,將消息轉(zhuǎn)發(fā)給匹配的Queue1
Queue1收到消息,將消息發(fā)送給訂閱者C1
C1收到消息,發(fā)送ACK給隊列確認收到消息
Queue1收到ACK,刪除隊列中緩存的此條消息

Consumer收到消息時需要顯式的向rabbit broker發(fā)送basic.ack消息或者consumer訂閱消息時設置auto_ack參數(shù)為true。在通信過程中,隊列對ACK的處理有以下幾種情況:
如果consumer接收了消息,發(fā)送ack,rabbitmq會刪除隊列中這個消息,發(fā)送另一條消息給consumer。
如果cosumer接受了消息, 但在發(fā)送ack之前斷開連接,rabbitmq會認為這條消息沒有被deliver,在consumer在次連接的時候,這條消息會被redeliver。
如果consumer接受了消息,但是程序中有bug,忘記了ack,rabbitmq不會重復發(fā)送消息。
rabbitmq2.0.0和之后的版本支持consumer reject某條(類)消息,可以通過設置requeue參數(shù)中的reject為true達到目地,那么rabbitmq將會把消息發(fā)送給下一個注冊的consumer。

Conclusion
本文和大家一起學習了rabbitmq的一些基礎知識,在之后的博文中,筆者將會和大家一起分享更多的Rabbitmq知識

RabbitMQ

Rabbitmq.png

Rabbitmq1.png
Rabbitmq2.png
Rabbitmq3.png
Rabbitmq4.png
Rabbitmq6.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,823評論 18 139
  • 來源 RabbitMQ是用Erlang實現(xiàn)的一個高并發(fā)高可靠AMQP消息隊列服務器。支持消息的持久化、事務、擁塞控...
    jiangmo閱讀 10,378評論 2 34
  • 1. 歷史 RabbitMQ是一個由erlang開發(fā)的AMQP(Advanced Message Queue )的...
    高廣超閱讀 6,111評論 3 51
  • rabbitMQ是一款基于AMQP協(xié)議的消息中間件,它能夠在應用之間提供可靠的消息傳輸。在易用性,擴展性,高可用性...
    點融黑幫閱讀 3,021評論 3 41
  • 1 RabbitMQ安裝部署 這里是ErLang環(huán)境的下載地址http://www.erlang.org/down...
    Bobby0322閱讀 2,251評論 0 11