1. RabbitMQ實戰應用技巧
1.1. 前言
由于項目原因,之後會和RabbitMQ比較多的打交道,所以讓我們來好好整理下RabbitMQ的應用實戰技巧,盡量避免日後的采坑
1.2. 概述
RabbitMQ有幾個重要的概念:虛擬主機,交換機,隊列和綁定
- 虛擬主機:一個虛擬主機持有一組交換機、隊列和綁定,我們可以從虛擬主機層面的顆粒度進行權限控制
- 交換機:Exchange用于轉發消息,它並不存儲消息,如果沒有Queue隊列綁定到Exchange,它會直接丟棄掉生産者發來的數據。
- 交換機還有個關聯的重要概念:路由鍵,消息轉發到哪個隊列根據路由鍵決定
- 綁定:就是綁定交換機和隊列,它是多對多的關系,也就是說多個交換機可以綁同一個隊列,也可以一個交換機綁多個隊列
1.3. 交換機
交換機有四種類型的模式Direct, topic, Headers and Fanout
1.3.1. Direct Exchage
Direct模式使用的是RabbitMQ的默認交換機,也是最簡單的模式,適合比較簡單的場景
如下圖所示,使用Direct模式,我們需要創建不同的隊列,而默認交換機則通過Routing key路由鍵的值來決定轉發到哪個隊列,可以看到,路由鍵綁定隊列是可以指定多個的
1.7. 交換機屬性
- exchange : 交換機名稱
- type : 交換機類型
- durable : 持久化,同隊列
- autoDelete : 是否自動刪除,同隊列
- internal : 若爲true,表示這個exchange不可以被client用來推送消息,僅用來進行exchange和exchange之間的綁定。
- arguments : 額外參數,目前只有個alternate-exchange,表示當生産者發送消息到這個交換機,路由不到該交換機的隊列,則會嘗試這個參數指定的交換機進行路由,若路由鍵匹配,則路由到alternate-exchange指定的隊列,相當于轉發了,剛好和上一個參數internal配合,若不想本交換機起到路由隊列的作用,可以設置internal爲true,把消息都轉發到alternate-exchange指定的交換機,由該交換機來路由指定隊列,
- 如下圖:exchange0設置了alternate-exchange交換機爲exchange1,生産者發送數據到exchange0路由鍵爲test1,在exchange0路由不到,則轉發到exchange1判斷路由符合,發送到隊列queue1