[RabbitMQ] RabbitMQ 工作模式介紹

RabbitMQ 是現在很常用的一個消息服務中間件, 通過不同類型的交換機(Exchange) 和不同的路由鍵(RoutingKey) , 可以實現不同分發策略, 靈活地將消息分發到不同的隊列中去.
在這裏插入圖片描述生產者(Producer)先將消息發送到交換機, 交換機根據事先設置好的分發策略, 將消息分發到不同的隊列中, 消費者從指定隊列中獲取消息.

生產者需要關注交換機(名稱和類型), 路由鍵, 而消費者只需要關注隊列.

在 RabbitMQ 中, 每個隊列中的消息都只會被消費一次, 如果需要將同一條消息被多個消費者消費多次, 可以通過合適的交換機, 將同一條消息投遞到多個不同的隊列中, 形成多個消息副本提供給不同的消費者.

1. 簡單模式 Simple

不需要指定交換機, 生產者直接通過隊列名發送消息, 消費者也直接通過隊列名獲取消息.

在這裏插入圖片描述
在這裏插入圖片描述

2. 路由模式 Routing

在這裏插入圖片描述需要聲明一個直連交換機(Direct Exchange), 並通過路由鍵(RoutingKey)將一個隊列綁定到直連交換機.

  • 允許多重綁定: 將同一隊列不同的路由鍵與交換機綁定
  • 允許重複綁定: 將多個隊列相同的路由鍵與交換機綁定, 會創建多個消息副本

在這裏插入圖片描述
當消息到達直連交換機時, 會根據消息中攜帶的路由鍵, 查找綁定的隊列:

  • 若交換機上有通過該路由鍵綁定的隊列, 將消息投遞到該隊列
  • 若交換機上沒有通過該路由鍵綁定的隊列, 則消息會被丟棄

3. 發佈/訂閱 Pub/Sub

需要聲明一個扇形交換機(Fanout Exchange), 並將多個隊列綁定到該交換機上.

扇形交換機上綁定隊列時不需要指定路由鍵(指定了也會被忽略), 到達扇形交換機的消息將會被投遞到該交換機的所有隊列中.

在這裏插入圖片描述在這裏插入圖片描述

4. 主題模式 Topics

在這裏插入圖片描述主題交換機與直連交換機類似, 都需要在綁定隊列時指定路由鍵, 到達交換機的消息會根據路由鍵投遞到不同的隊列.

但區別在於直連交換機使用的是精確匹配的路由鍵, 而主題交換機則允許使用通配符進行模糊匹配.

主題交換機綁定隊列的key是一個匹配表達式, 以句點.爲分隔符, *匹配一個詞, #匹配任意多個詞, 如

  • usa.*: 僅匹配形如 usa.x 的key, 忽略 usa.x.y, usa.x.y.z 等key
  • china.#: 匹配形如 china.x, china.x.y, china.x.y.z 等key
  • *.news: 僅匹配形如 x.news 的key, 忽略 x.y.news, x.y.z.news 等key
  • #.weather: 匹配形如 x.weather, x.y.weather, x.y.z.weather 等key

比如一個生產者以usa.news爲路由鍵發送消息到主題交換機, 則該消息會被投遞到 usa.*#.news 兩個隊列
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章