RabbitMQ 基礎(chǔ)知識

RabbitMQ 常用命令

  1. 設(shè)置文件夾結(jié)構(gòu)(日志文件夾愕乎,數(shù)據(jù)庫文件夾 - 存儲服務(wù)器信息,比如元數(shù)據(jù)陆错、虛擬主機等
$ mkdir -p /var/log/rabbitmq 
$ mkdir -p /var/lib/rabbitmq/mnesia/rabbit
  1. 啟動 - 生產(chǎn)環(huán)境運行 RabbitMQ 時骤星,通常建一個 rabbitmq 用戶,為其賦予文件夾權(quán)限翠储,而非使用普通用戶賬戶來運行所有命令绘雁。
$ ./sbin/rabbitmq-server
  1. 查看服務(wù)器狀態(tài)
$ ./sbin/rabbitmqctl status
  1. vhost 和權(quán)限控制無法通過 AMQP 協(xié)議創(chuàng)建(不同于交換器,隊列和綁定)援所,需要通過 ./sbin/ 目錄中的 rabbitmqctl 工具來創(chuàng)建
    遠程控制方法: 通過指定 -n rabbit@[server_name] 來管理遠程 RabbitMQ 節(jié)點莫秆,@ 左邊是 Erlang 應(yīng)用程序名稱,這里永遠是 rabbit在旱,右邊是服務(wù)器主機名或者 IP 地址。**需要確保運行 Rabbit 節(jié)點的服務(wù)器和運行 rabbitmqctl 的工作站安裝了相同的 Erlang cookie
// 1. 創(chuàng)建虛擬機
$ ./sbin/rabbitmqctl add_vhost [vhost_name]
// 2. 刪除虛擬機
$ ./sbin/rabbitmqctl delete_vhost [vhost_name]
// 3. 查看虛擬機
$ ./sbin/rabbitmqctl list_vhosts
  1. 重要概念
  1. vhost: 本質(zhì)上是一個 mini 版的 RabbitMQ 服務(wù)器历帚,擁有自己的交換器、綁定杠娱、隊列...挽牢,更重要的是,它擁有自己的權(quán)限控制摊求。這使得你能夠安全地使用一個 RabbitMQ 服務(wù)器來服務(wù)眾多應(yīng)用程序禽拔,而不用擔心別人刪除你的隊列,不用擔心隊列室叉、交換器的命名沖突睹栖,有利于集群部署
    vhost 之于 Rabbit 就像是虛擬機之于物理服務(wù)器一樣:它們通過在各個實例間提供邏輯上的分離茧痕,允許你為不同的應(yīng)用程序安全保密的運行數(shù)據(jù)野来。
  2. 消費者對消息的確認和告訴生產(chǎn)者消息已經(jīng)被接收了這兩件事情毫不相關(guān)
    消費者通過確認命令告訴 RabbitMQ 它已經(jīng)正確的接收了消息,同時 RabbitMQ 才能安全的把消息從隊列刪除
  3. 消費者和生產(chǎn)者都能通過 queue.declare 命令來創(chuàng)建隊列踪旷,但如果消費者在同一條信道上訂閱了另一個隊列的話曼氛,就無法再聲明隊列了。必須先取消訂閱令野,將信道置為 傳輸 模式
  4. 隊列設(shè)置中一些有用的參數(shù)
  • exclusive(獨占的):如果設(shè)置為 true舀患,隊列將變?yōu)樗接械模藭r只有你的應(yīng)用程序才能消費隊列消息彩掐,當你想要限制一個隊列只有一個消費者的時候很有幫助
  • auto-delete:當最后一個消費者取消訂閱的時候构舟,隊列就會自動刪除,如果你需要臨時隊列只為一個消費者服務(wù)的話堵幽,請結(jié)合使用 auto-deleteexclusive狗超。當消費者斷開連接時,隊列就被移除了
  1. basic.reject 允許消費者拒絕 RabbitMQ 發(fā)送的消息朴下,如果把 reject 命令的 requeue 參數(shù)設(shè)置為 true 的話努咐,RabbitMQ 會將消息發(fā)送給下一個訂閱的消費者,如果設(shè)置為 false 的話殴胧, RabbitMQ 立即會把消息從隊列中移除渗稍。
  2. dead letter 死信隊列:用來存放那些被拒絕而不重入隊列的消息,需要使用 reject 命令并將 requeue 參數(shù)設(shè)置為 false团滥。死信隊列讓你通過檢測 (拒絕 / 未送達) 的消息來發(fā)現(xiàn)問題
交換器竿屹、綁定、隊列的關(guān)系圖

QA:
1. 如果聲明一個已經(jīng)存在的隊列會發(fā)生什么灸姊?

如果聲明參數(shù)完全匹配現(xiàn)存隊列拱燃,Rabbit 就什么也不做,并成功返回力惯。如果參數(shù)不匹配的話碗誉,隊列聲明嘗試會失敗召嘶,如果只是想檢測隊列是否存在,則可以設(shè)置 queue.declarepassive(被動的) 為 true哮缺。在該設(shè)置下弄跌,如果隊列存在,那么 queue.declare 命令會成功返回尝苇;如果隊列不存在铛只, queue.declare 命令也不會創(chuàng)建隊列,而會返回一個錯誤茎匠。

2. 由生產(chǎn)者還是消費者來創(chuàng)建隊列格仲?

消費者才需要訂閱隊列押袍,但是還要考慮生產(chǎn)者能否承擔得起丟失消息诵冒。發(fā)送出去的消息如果路由到了不存在的隊列的話,Rabbit 會忽略它們谊惭。如果不能承擔消息丟失汽馋,最好生產(chǎn)者和消費者都嘗試去創(chuàng)建隊列

3. 如何保證消息的持久化?

必須設(shè)置成如下:

  • delivery mode(投遞模式) 必須設(shè)置為 2 (persistent)持久化圈盔, 2 是非持久化(non-persistent)
  • 發(fā)送到持久化的交換器
  • 到大持久化的隊列

4. 持久化原理豹芯?

先將消息寫入磁盤上的一個持久化文件。當發(fā)布一條持久性消息到持久化交換器上時驱敲,Rabbit 會把消息寫入到日志文件后才發(fā)送響應(yīng)铁蹈。注意:如果之后這條消息路由到了非持久化隊列,它會自動從持久性日志中移除众眨,并且無法從服務(wù)器重啟中恢復(fù)握牧。 一旦從持久化隊列中消費了一條持久性消息(并且手動確認了它),Rabbit 在持久性日志中把這條消息標記為等待垃圾收集娩梨。

一. direct 交換器:如果路由鍵匹配的話沿腰,消息就被投遞到對應(yīng)的隊列

image.png

二. fanout 交換器:當發(fā)送一條消息到 fanout 交換器時,它會把消息投遞給所有附加在此交換器上的隊列

image.png

應(yīng)用場景:舉例來說狈定,一個 web 應(yīng)用程序可能需要在用戶上傳圖片時颂龙,用戶相冊必須清除緩存,同時用戶應(yīng)該得到積分獎勵纽什。你可以將兩個隊列綁定到圖片上傳交換器上措嵌。一個用于清除緩存,一個用戶增加用戶積分芦缰。當有新需求需要添加其他規(guī)則時企巢,只要為新的消費者寫一段代碼,然后聲明新的隊列并將其綁定到 fanout交換器上即可饺藤,而不用修改原來的代碼包斑。

三. topic 交換器:

topic交換器消息流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末流礁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子罗丰,更是在濱河造成了極大的恐慌神帅,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萌抵,死亡現(xiàn)場離奇詭異找御,居然都是意外死亡,警方通過查閱死者的電腦和手機绍填,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門霎桅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讨永,你說我怎么就攤上這事滔驶。” “怎么了卿闹?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵揭糕,是天一觀的道長。 經(jīng)常有香客問我锻霎,道長著角,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任旋恼,我火速辦了婚禮吏口,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冰更。我一直安慰自己产徊,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布冬殃。 她就那樣靜靜地躺著囚痴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪审葬。 梳的紋絲不亂的頭發(fā)上深滚,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音涣觉,去河邊找鬼痴荐。 笑死,一個胖子當著我的面吹牛官册,可吹牛的內(nèi)容都是我干的生兆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼膝宁,長吁一口氣:“原來是場噩夢啊……” “哼鸦难!你這毒婦竟也來了根吁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤合蔽,失蹤者是張志新(化名)和其女友劉穎击敌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拴事,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡沃斤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刃宵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衡瓶。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖牲证,靈堂內(nèi)的尸體忽然破棺而出哮针,到底是詐尸還是另有隱情,我是刑警寧澤从隆,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布诚撵,位于F島的核電站,受9級特大地震影響键闺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澈驼,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一辛燥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缝其,春花似錦挎塌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至漠其,卻和暖如春嘴高,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背和屎。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工拴驮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柴信。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓套啤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親随常。 傳聞我的和親對象是個殘疾皇子潜沦,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

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