RabbitMQ詳解
MQ常用概念
快速入門使用
推薦查看 <>
目錄
交換機(Exchange)
1.Direct Exchange 根據route key 直接找到隊列
2.Topic Exchange 根據route key 匹配隊列
3.Fanout Exchange 不處理route key 全網發送,所有綁定的隊列都發送
交換機(Exchange)
1. Direct Exchange
Direct Exchange是RabbitMQ默認的交換機模式,也是最簡單的模式,根據key全文匹配去尋找隊列。
Q1 綁定了一個binding key名字為orange;
Q2 就有 2 個binding key,名字為black和green
當消息中的 路由鍵 和 這個 binding key 對應上的時候,那麼就知道了該消息去到哪一個隊列中。
2.Topic Exchange
Topic Exchange 轉發消息主要是根據通配符。 在這種交換機下,隊列和交換機的綁定會定義一種路由模式,那麼,通配符就要在這種路由模式和路由鍵之間匹配後交換機才能轉發消息。
在這種交換機模式下:
路由鍵必須是一串字符,用句號( . ) 隔開,比如說 agreements.us,或者 agreements.eu.stockholm 等。
路由模式必須包含一個 星號( * ),主要用於匹配路由鍵指定位置的一個單詞,比如說,一個路由模式是這樣子:agreements..b.*,那麼就只能匹配路由鍵是這樣子的:第一個單詞是 agreements,第四個單詞是 b。 井號(#)就表示相當於一個或者多個單詞,例如一個匹配模式是agreements.eu.berlin.#,那麼,以agreements.eu.berlin開頭的路由鍵都是可以的。
具體代碼發送的時候還是一樣,第一個參數表示交換機,第二個參數表示routing key,第三個參數即消息。如下:
rabbitTemplate.convertAndSend("testTopicExchange","key1.a.c.key2", " this is RabbitMQ!");
topic 和 direct 類似, 只是匹配上支持了"模式", 在"點分"的 routing_key 形式中, 可以使用兩個通配符:
* 表示一個詞.
# 表示零個或多個詞.
3.Fanout Exchange
不處理路由鍵。你只需要簡單的將隊列綁定到交換機上。一個發送到交換機的消息都會被轉發到與該交換機綁定的所有隊列上。很像子網廣播,每臺子網內的主機都獲得了一份複製的消息。Fanout交換機轉發消息是最快的。
發送消息,只需要指定交換機, route key
可以為空
給消息設置屬性值
設置請求頭或者編碼 MessageProperties messageProperties= message.getMessageProperties();
閱讀更多 東方既白 的文章