目錄
- 一、概述
- 二、Direct Exchange (直連型交換機)
- 三、Fanout Exchange(扇型交換機)
- 四、Topic Exchange(主題交換機)
- 五、Header Exchange(頭交換機)
- 六、Default Exchange(默認交換機)
- 七、Dead Letter Exchange(死信交換機)
一、概述
RabbitMQ最簡單的實現流程如下:首先生產者將消息推送至RabbitMQ服務,然后經過交換機,隊列等各種關系,將數據處理入列后,最終由消費者獲取對應監聽的消息。
常用的交換機有以下六種,因為消費者是從隊列獲取信息的,隊列是綁定交換機的(一般),所以對應的消息推送/接收模式也會有以下幾種:
- Direct Exchange (直連型交換機)
- Fanout Exchange(扇型交換機)
- Topic Exchange(主題交換機)
- Header Exchange(頭交換機)
- Default Exchange(默認交換機)
- Dead Letter Exchange(死信交換機)
二、Direct Exchange (直連型交換機)
直連型交換機,也可以叫做定向交換機
。根據消息攜帶的路由鍵
將消息投遞給對應的隊列。
大致流程:有一個隊列綁定了一個直連交換機,同時賦予了一個路由鍵routing key
。然后當一個消息攜帶路由值為X
,這個消息通過生產者發送給交換機時,交換機就會根據這個路由值X
去尋找綁定值也是X
的隊列。
RabbitMQ:SpringAMQP Direct Exchange(直連型交換機)
三、Fanout Exchange(扇型交換機)
扇型交換,也可以叫做廣播交換機
。這個交換機沒有路由的概念,就算綁定了路由鍵也是無視的。交換機在接收到消息后,會直接轉發到綁定到它上面的所有隊列
上。
RabbitMQ:SpringAMQP Fanout Exchange(扇型交換機)
四、Topic Exchange(主題交換機)
主題交換機,這個交換機跟直接交換機流程差不多,但是它的特點就是它的路由鍵跟綁定鍵是有規則的
。
* (星號) 用來表示一個單詞 (必須出現的)
# (井號) 用來表示任意數量(零個或多個)單詞
通配的綁定鍵是跟隊列進行綁定的,舉個小例子
隊列Q1 綁定鍵為 *.TT.*
隊列Q2綁定鍵為 TT.#
如果一條消息攜帶的路由鍵為 A.TT.B,那么隊列Q1將會收到;
如果一條消息攜帶的路由鍵為TT.AA.BB,那么隊列Q2將會收到;
總結:
- 當一個隊列的綁定鍵為
“#”(井號)
的時候,這個隊列將會無視消息的路由鍵,接收所有的消息
。 - 當
* (星號)
和# (井號)
這兩個特殊字符都未在綁定鍵中出現的時候,此時主題交換機就擁有的直連交換機
的行為。
所以主題交換機也就實現了扇形交換機的功能,和直連交換機的功能。
RabbitMQ:SpringAMQP Topic Exchange(主題交換機)