
交換機是RabbitMQ路由消息的核心不同類型的交換機對應不同的路由邏輯交換機和路由規則是多對多綁定適配不同的業務場景。RabbitMQ提供4種默認交換機類型其中前3種最常用。1、Direct Exchange直連交換機精準匹配一對一/多路由Direct交換機是最基礎的類型核心邏輯是“路由鍵Routing Key與綁定鍵Binding Key完全匹配”僅當兩者字符完全一致時消息才會被路由到對應隊列。核心特性路由規則簡單直接精準度高。一個隊列可綁定多個Binding Key一個Binding Key也可綁定多個隊列此時消息會被路由到所有匹配隊列類似“多播”。適用場景需要精準路由的場景例如業務模塊拆分“訂單支付”消息僅路由到“支付處理隊列”“訂單退款”消息僅路由到“退款處理隊列”。任務分發特定類型的任務分配給指定的工作隊列如視頻轉碼任務分配給轉碼 worker 隊列。工作流程示例1. 聲明Direct交換機名稱direct_exchange2. 隊列A綁定Binding Key order.pay隊列B綁定Binding Key order.refund隊列C綁定Binding Key order.pay3. 生產者發送消息指定Routing Key order.pay4. 交換機匹配后將消息路由到隊列A和隊列C隊列B無消息。交換機綁定隊列的代碼如下// 聲明一個直連交換機channel.exchangeDeclare(direct_exchange, direct, true);// 聲明一個隊列channel.queueDeclare(order_queue, true, false, false, null);// 將隊列綁定到交換機綁定鍵為 order.createchannel.queueBind(order_queue, direct_exchange, order.create);2、Fanout Exchange扇出交換機無差別廣播一對多路由Fanout交換機是“廣播型”交換機核心邏輯是“忽略Routing Key將消息路由到所有與該交換機綁定的隊列”無需匹配規則只要隊列綁定了交換機就能收到消息。核心特性路由邏輯最簡單效率最高無需匹配計算。消息會被復制到所有綁定隊列每個隊列都能收到完整消息。適用場景需要廣播消息的場景例如系統通知服務啟動/下線通知、全局配置更新所有相關服務都需接收。日志收集應用日志同時發送到“實時分析隊列”和“歸檔存儲隊列”。事件同步用戶注冊成功后同步觸發“發送歡迎短信”“創建用戶檔案”“添加積分”等多個任務。工作流程示例1. 聲明Fanout交換機名稱fanout_exchange2. 隊列1、隊列2綁定該交換機隊列3未綁定3. 生產者發送消息即使指定Routing Key也會被忽略4. 交換機將消息路由到隊列1和隊列2隊列3無消息。3、Topic Exchange主題交換機模糊匹配按“主題”路由Topic交換機是最靈活的類型核心邏輯是“通過通配符匹配Routing Key與Binding Key”支持按“主題”批量路由消息兼顧精準性和靈活性。核心特性Routing Key和Binding Key需為“多段字符串”段之間用“.”分隔如“user.create.wechat”每段代表一個業務維度如業務類型、操作、渠道。支持兩種通配符*星號匹配1個任意段如“user.*”可匹配“user.create”“user.delete”但不匹配“user.create.wechat”#井號匹配0個或多個任意段如“user.#”可匹配“user”“user.create”“user.create.wechat”。適用場景需要按“主題”分類路由的場景例如多維度業務消息通過“user.#”接收所有用戶相關消息通過“user.create.*”僅接收用戶創建的細分消息??缒K消息分發訂單消息按地區拆分Binding Key order.#.beijing僅接收北京地區的訂單消息。工作流程示例1. 聲明Topic交換機名稱topic_exchange2. 隊列A綁定Binding Key user.create.*隊列B綁定Binding Key user.#隊列C綁定Binding Key user.*.alipay3. 生產者發送消息指定Routing Key user.create.wechat4. 交換機匹配后將消息路由到隊列A*匹配“wechat”和隊列B#匹配“create.wechat”隊列C不匹配無消息。4、Headers Exchange頭部交換機按消息頭匹配忽略Routing KeyHeaders交換機通過消息的頭部屬性而非Routing Key進行匹配靈活性較高但路由邏輯復雜性能略差實際應用中較少使用。核心邏輯是生產者發送消息時設置消息頭如“typeorder”“priorityhigh”交換機根據綁定隊列時指定的頭部規則如“匹配所有頭”“匹配任意頭”路由消息。適用場景需根據多維度屬性路由消息且不希望依賴Routing Key的特殊場景如復雜的權限控制消息。