一、生產者
在發佈訂閱模式的代碼基礎上,進行一定的調整,將聲明交換機的路由模式調整爲direct路由模式。
這個時候需要用到路由key,類似於給消息用來分類的標籤。
分別發送三條消息,發向GetOne、GetTwo和GetThree三個路由key:
//聲明交換機(類型direct->路由模式) channel.exchangeDeclare(EXCHANGE,"direct"); //發送消息到交換機(交換機無法持久化,如果消息沒有及時接收,重啓後容易丟失數據) channel.basicPublish(EXCHANGE,"GetOne",null,"這是發送給GetOne的消息".getBytes()); channel.basicPublish(EXCHANGE,"GetTwo",null,"這是發送給GetTwo的消息".getBytes()); channel.basicPublish(EXCHANGE,"GetThree",null,"這是發送給GetThree的消息".getBytes());
二、消費者
定義兩個消費者GetOne、GetTwo,在發佈訂閱模式的代碼基礎上,進行一定的調整。
綁定交換機時,第二個參數附加需要的路由key,如果需要綁定多個,就分多次綁定。
GetOne綁了GetOne、GetThree兩個路由key,如下:
//將隊列綁定到交換機(第二個參數是路由的key,需要多個的話就綁多個) channel.queueBind(QUEUE,EXCHANGE,"GetOne"); channel.queueBind(QUEUE,EXCHANGE,"GetThree");
GetTwo綁了GetTwo一個路由key,如下:
//將隊列綁定到交換機 channel.queueBind(QUEUE,EXCHANGE,"GetTwo");
三、運行結果
首頁也是先啓動生產者,初始化需要用到的交換機test-route。
先後依次啓動消費者GetOne和GetTwo,再次啓動生產者,結果如下: