RabbitMQ : Topic 交換器(規則匹配)
Topic交換器型別與Direct類似,都是通過路由鍵來匹配訊息佇列,不同之處是Direct是通過完全匹配路由鍵的名稱對應,而Topic型別支援規則匹配,也即支援萬用字元的方式。
下面通過不同的服務對不同級別的日誌傳送到不同規則的訊息佇列
一、建立接收者(消費者)專案
1.設定配置檔案application.properties
設定相應的RabbitMQ的伺服器和相應的交換器名稱,佇列名稱,如下圖
這裡可以不配置路由鍵,因為用的是規則匹配,一般配置好了,不會再改,直接配置在註解上就可以。
2.建立日誌級別的資訊接收者,以匹配所有的日誌為例。
可以參考上一個例子(Direct交換型別),這裡的路由鍵使用的是規則匹配,例如不論是哪個服務產生的哪種級別的日誌都要求被接收,設定的路由鍵格式如: *.log.*。那麼在傳送訊息時,設定的路由鍵符合這個格式即可。
LogReceiver.java
需要單獨接收的2個日誌級別,Error、Info 的類跟LogReceiver.java類似,只需要將相應的佇列名稱和路由鍵改掉即可。
佇列名稱就是配置檔案裡相應的引數,路由鍵分別為: *.log.error、*.log.info。
二、 設定訊息傳送者(生產者)專案
1.設定配置檔案application.properties
這裡也不要配置路由鍵,因為使用的規則匹配,只要在使用的時候符合定義的規則即可,而在實際使用中,可能會根據不同的功能定義不同的路由鍵,這就會導致路由鍵比較多了,也就不太合適在這裡配置了。
2.建立傳送者(以使用者服務為例)
UserSender.java
這裡傳送了4種級別的日誌訊息,並且每種訊息對應相應的路由鍵,理論上控制檯會發出6條語句,
4條是all-->開頭,一條以info-->開頭,一條以error-->開頭。
這裡先直接給出結果。
產品服務和訂單服務的傳送者和使用者服務類似,只要將相應的路由鍵修改成相應的匹配規則即可,
例如產品的路由鍵規則為 product.logo.info 、product.logo.error等。
三、測試類
訂單服務、產品服務的測試類類似,執行的結果如下。