RabbitMQ相關(guān)介紹

1.為什么使用信道(channel)而不使用TCP連接發(fā)送AMQP命令?##

操作系統(tǒng)來說頻繁的建立和銷毀TCP連接開銷非常昂貴壕曼,而操作系統(tǒng)每秒建立的連接是有上限的苏研,性能瓶頸不可避免,而只建立一條TCP連接無疑是一個很好的方案腮郊,在這條連接當(dāng)中建立多條信道與RabbitMQ進(jìn)行私密通信摹蘑,相當(dāng)于光纖電纜一樣,一條電纜有多條光束轧飞,信道是沒有限制的

2.隊(duì)列##

1衅鹿、AMQP的命令
  basic.consume與basic.get 如果需要消息一到達(dá)隊(duì)列就自動接收的話,應(yīng)該使用basic.consume basic.get會訂閱消息过咬,獲得單條消息塘安,然后取消訂閱,值得注意的是不應(yīng)該循環(huán)basic.get來替代basic.consume援奢,應(yīng)該理性使用basic.consume實(shí)現(xiàn)高吞吐量
消息如果到達(dá)無人訂閱的隊(duì)列,消息會在隊(duì)列中等待忍捡,知道有消費(fèi)者訂閱到該隊(duì)列
2集漾、接收消息
  消費(fèi)者確認(rèn)消息告訴RabbitMQ已正確接收RabbitMQ會安全的把消息從隊(duì)列上刪除切黔, 如果消費(fèi)者收到一條消息,確認(rèn)之前RabbitMQ斷開了連接(或者從隊(duì)列上取消訂閱)具篇,RabbitMQ會認(rèn)為這條消息沒有被分發(fā)纬霞,然后分發(fā)給下一個訂閱者。如果應(yīng)用程序處理消息耗時驱显,則可以延遲確認(rèn)消息诗芜,防止源源不斷的消息涌入
** 3、拒絕接收 消息未確認(rèn)之前 **
  a.消費(fèi)者從RabbitMQ服務(wù)器斷開連接埃疫,它會將消息入隊(duì)并發(fā)送給下一個消費(fèi)者伏恐,但是這種連接/斷開方式會增加服務(wù)器負(fù)擔(dān)
  b.可以使用basic.reject命令拒絕接收消息,參數(shù)為true栓霜,會發(fā)送給下一個消費(fèi)者翠桦,false時,會把消息從隊(duì)列中移除不會分發(fā)給下一個消費(fèi)者
** 4胳蛮、隊(duì)列設(shè)置 **
  如果想擁有私人隊(duì)列只為一個消費(fèi)者服務(wù)销凑,可以設(shè)置exclusive參數(shù)為true 如果需要臨時隊(duì)列和結(jié)合exclusive和auto_delete,auto_delete在消費(fèi)者取消訂閱時仅炊,會自動刪除斗幼,都設(shè)置為true
** 3.三種基本交換類型 **

  • direct交換器非常簡單:如果路由鍵匹配的話,消息就會被投遞到相應(yīng)的隊(duì)列當(dāng)中抚垄;
  • fanout交換器會將收到的消息廣播到綁定的隊(duì)列上蜕窿;
  • topic交換器使得來自不同源頭的消息能夠到達(dá)同一個隊(duì)列。

** 4.虛擬主機(jī)(vhost)的作用**

  • 邏輯分離允許為不同應(yīng)用程序安全保密的運(yùn)行數(shù)據(jù)督勺,將rabbit的眾多客戶區(qū)分開來渠羞,避免隊(duì)列和交換器的命名沖突;
  • 權(quán)限控制以vhost為單位智哀;
  • vhost之間是絕對隔離的次询,無法將vhost1上的交換器綁定到vhost2中的隊(duì)列去;
  • 可以安全的遷移到新的RabbitMQ服務(wù)器上處理新的負(fù)載瓷叫,不會有任何命名沖突
  • vhost不僅消除了在基礎(chǔ)架構(gòu)中為每一層都運(yùn)行一個RabbitMQ服務(wù)器屯吊,也避免了為每一層創(chuàng)建不同集群

** 5.持久化的策略**
  durable屬性決定了RabbitMQ是否需要在崩潰或者重啟之后重新創(chuàng)建隊(duì)列(或者交換器) 持久化消息三個要點(diǎn): 把他的投遞模式(delivery mode)選項(xiàng)設(shè)置為2(持久); 發(fā)送到持久化的交換器上摹菠; 到達(dá)持久化的隊(duì)列盒卸。 特點(diǎn): 持久性消息從服務(wù)器重啟中恢復(fù)的方式是寫入磁盤的持久化日志文件,當(dāng)發(fā)布一條持久性消息到持久化的交換器上時次氨,消息提交到日志文件后才會響應(yīng)蔽介;
  持久性消息如果路由到了非持久化的隊(duì)列當(dāng)中,會自動從持久性日志中移除,無法從服務(wù)器重啟中恢復(fù)虹蓄;一旦被正確消費(fèi)(經(jīng)過確認(rèn)后)犀呼,RabbitMQ會在持久化日志中將這條消息標(biāo)記為等待垃圾收集。在消費(fèi)之前薇组,如果重啟外臂,服務(wù)器會重建交換器和隊(duì)列以及綁定,重播持久性日志文件中的消息到合適的隊(duì)列或者交換器上律胀,這取決與宕機(jī)時消息處在哪個環(huán)節(jié)上
** 6.解決事務(wù)的方案:發(fā)送方確認(rèn)模式**
  由于AMQP內(nèi)部事務(wù)對性能有很大瓶頸宋光,現(xiàn)采取發(fā)送方確認(rèn)模式保證事務(wù),將信道設(shè)置為confirm模式炭菌,所有在此信道上發(fā)布的消息都會有一個唯一的ID號罪佳,當(dāng)被投遞到匹配的隊(duì)列時,信道就會發(fā)送一個發(fā)送方確認(rèn)模式給生產(chǎn)者應(yīng)用程序娃兽,這個模式是異步的菇民,應(yīng)用程序可以等待確認(rèn)的同時繼續(xù)發(fā)送下一條,但如果是持久化的消息投储,會在寫入磁盤之后消息發(fā)出第练。
  如果發(fā)送內(nèi)部錯誤而導(dǎo)致消息丟失,RabbitMQ會發(fā)送一條nack(not acknowledged,未確認(rèn))消息玛荞,這種模式下每分鐘可追蹤數(shù)以百萬計的消息投遞
** 7娇掏、性能特點(diǎn) **

  1. 可靠性(Reliability) RabbitMQ提供很多特性供我們可以在性能和可靠性作出折中的選擇,包括持久化勋眯、發(fā)送確認(rèn)婴梧、發(fā)布者確認(rèn)和高可用性等。
  2. 彈性選路(Flexible Routing) 消息在到達(dá)隊(duì)列前通過交換(exchanges)來被選路客蹋。RabbitMQ為典型的選路邏輯設(shè)計了幾個內(nèi)置的交換類型塞蹭。對于更加復(fù)雜的選路,我們可以將exchanges綁定在一起或者寫屬于自己的exchange類型插件讶坯。
  3. 集群化(Clustering) 在一個局域網(wǎng)內(nèi)的幾個RabbitMQ服務(wù)器可以集群起來番电,組成一個邏輯的代理人。
  4. 聯(lián)盟(Federation) 對于那些需要比集群更加松散和非可靠連接的服務(wù)器來說辆琅,RabbitMQ提供一個聯(lián)盟模型(Federation Model)
  5. 高可用隊(duì)列(High Available Queue) 可以在一個集群里的幾個機(jī)器里對隊(duì)列做鏡像漱办,確保即時發(fā)生了硬件失效,你的消息也是安全的婉烟。
  6. 多種協(xié)議(Multi-protocol) RabbitMQ支持消息在多種協(xié)議中傳輸娩井。
  7. 多客戶端(Many Clients) RabbitMQ客戶端有你幾乎能想象到的任何語言。
  8. 管理界面(Management UI) RabbitMQ附帶一個容易使用的管理界面,允許您監(jiān)控和控制你的消息broker服務(wù)器的方方面面似袁。
  9. 跟蹤(Tracing) 如果你的消息系統(tǒng)行為異常洞辣,RabbitMQ提供跟蹤支持來找出錯誤的根源咐刨。
  10. 插件系統(tǒng)(Plugin System) RabbitMQ提供各種方式的插件擴(kuò)展,我們可以實(shí)現(xiàn)自己的插件屋彪。

使用任務(wù)隊(duì)列一個優(yōu)點(diǎn)是能夠輕易地并行處理任務(wù)所宰。當(dāng)處理大量積壓的任務(wù),只要增加工作隊(duì)列畜挥,通過這個方式,能夠?qū)崿F(xiàn)輕易的縮放婴谱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蟹但,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谭羔,更是在濱河造成了極大的恐慌华糖,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘟裸,死亡現(xiàn)場離奇詭異客叉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)话告,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門兼搏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沙郭,你說我怎么就攤上這事佛呻。” “怎么了病线?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵吓著,是天一觀的道長。 經(jīng)常有香客問我送挑,道長绑莺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任惕耕,我火速辦了婚禮纺裁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赡突。我一直安慰自己对扶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布惭缰。 她就那樣靜靜地躺著浪南,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漱受。 梳的紋絲不亂的頭發(fā)上络凿,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天骡送,我揣著相機(jī)與錄音,去河邊找鬼絮记。 笑死摔踱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怨愤。 我是一名探鬼主播派敷,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撰洗!你這毒婦竟也來了篮愉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤差导,失蹤者是張志新(化名)和其女友劉穎试躏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體设褐,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颠蕴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了助析。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犀被。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖貌笨,靈堂內(nèi)的尸體忽然破棺而出弱判,到底是詐尸還是另有隱情,我是刑警寧澤锥惋,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布昌腰,位于F島的核電站,受9級特大地震影響膀跌,放射性物質(zhì)發(fā)生泄漏遭商。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一捅伤、第九天 我趴在偏房一處隱蔽的房頂上張望劫流。 院中可真熱鬧,春花似錦丛忆、人聲如沸祠汇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽可很。三九已至,卻和暖如春凰浮,著一層夾襖步出監(jiān)牢的瞬間我抠,已是汗流浹背苇本。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菜拓,地道東北人瓣窄。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像纳鼎,于是被迫代替她去往敵國和親俺夕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理贱鄙,服務(wù)發(fā)現(xiàn)啥么,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 來源 RabbitMQ是用Erlang實(shí)現(xiàn)的一個高并發(fā)高可靠AMQP消息隊(duì)列服務(wù)器贰逾。支持消息的持久化、事務(wù)菠秒、擁塞控...
    jiangmo閱讀 10,359評論 2 34
  • RabbitMQ 原理介紹及安裝部署 標(biāo)簽:RabbitMQ 安裝 簡介 RabbitMQ 是一個用 Erlang...
    神仙CGod閱讀 8,569評論 0 60
  • 什么叫消息隊(duì)列 消息(Message)是指在應(yīng)用間傳送的數(shù)據(jù)疙剑。消息可以非常簡單,比如只包含文本字符串践叠,也可以更復(fù)雜...
    lijun_m閱讀 1,346評論 0 1
  • RabbitMQ采用Erlang編寫言缤,需安裝語言庫才能運(yùn)行RabbitMQ代理服務(wù)器。AMQP:高級消息隊(duì)列協(xié)議禁灼。...
    JAVA覓音閣閱讀 3,636評論 0 7