1. 程式人生 > >RabbitMQ : Topic 交換器(規則匹配)

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等。

三、測試類

訂單服務、產品服務的測試類類似,執行的結果如下。