這篇文章主要講 RabbitMQ 中的交換器。git
咱們不是把消息直接發送到隊列裏面的,而是先發送到了交換器,交換器再根據路由鍵把咱們的消息投遞到對應的隊列。github
每種交換器定義了不一樣的路由算法來把消息投遞到對應的隊列。算法
RabbitMQ 中交換器主要分爲四種類型:direct、fanout、topic 以及 headers,headers 用的比較少,就不講了。spring
路由鍵全文匹配windows
當你發送一條消息到 direct 交換器時,它會根據路由鍵全文匹配去尋找綁定到此交換器上的匹配成功的隊列,而後投遞消息。瀏覽器
如上圖,生產者使用路由鍵 「fruit.apple」 發送消息到 direct 交換器,交換器會根據綁定信息,全文匹配路由鍵,因此只有 apple 隊列符合。app
忽略路由鍵spring-boot
當你發送一條消息到 fanout 交換器時,它會把消息投遞給全部綁定到此交換器上的隊列,並且會忽略路由鍵。測試
如上圖,生產者使用路由鍵 「fruit.apple」 發送消息到 fanout 交換器,可是交換器會忽略路由鍵,因此 apple 隊列、banana 隊列、orange 隊列都符合。ui
路由鍵通配符匹配
當你發送一條消息到 topic 交換器時,它會根據路由鍵通配符匹配去尋找綁定到此交換器上的匹配成功的隊列,而後投遞消息。
如上圖,生產者使用路由鍵 「fruit.apple」 發送消息到 topic 交換器,交換器會根據綁定信息,通配符匹配路由鍵,因此 apple 隊列、banana 隊列、orange 隊列都符合。
先加入運行參數,由於幾個交換器配置都在一個項目裏面,會致使 Bean 衝突,因此使用 @Profile("direct")
、@Profile("fanout")
、@Profile("topic")
區分了不一樣環境下的啓用不一樣的配置。
--spring.profiles.active=direct
--spring.profiles.active=fanout
--spring.profiles.active=topic
運行項目,而後打開瀏覽器,輸入 http://localhost:9999/sendMessage
RabbitMQ for Windows: Exchange Types
因爲本人知識和能力有限,文中若有沒說清楚的地方,但願你們能在評論區指出,以幫助我將博文寫得更好。