DirectExchange:這種交換機的模式跟前面的Fouout(廣播)不太一樣,DirectExchange 會將接收到的消息根據(jù)規(guī)則路由到指定的Queue,因此也被稱之為 路由模式(routes)。
他的模型如下所示:
我們先說一下上面這個圖吧:
OK,廢話少說,老規(guī)矩,咱們代碼來一波:
實現(xiàn)思路:步驟一、配置我們的配置類。步驟二、在Consumer服務中,編寫兩個消費者方法,分別監(jiān)聽direct.queue1和direct.queue2。步驟三、在Publisher服務中,編寫測試方法,向交換機exchange.direct發(fā)送消息。
步驟一、使用我們的@RabbitListener注解聲明我們的Exchange、Queue、RoutingKey,編寫兩個消費者方法。
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "direct.queue1"),
exchange = @Exchange(name = "exchange.direct", type = ExchangeTypes.DIRECT),
key = {"red", "blue"}
))
public void listenerDirectQueue1(String msg){System.out.println("監(jiān)聽到 direct.queue1 的消息為:【"+ msg +"】");
}
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "direct.queue2"),
exchange = @Exchange(name = "exchange.direct", type = ExchangeTypes.DIRECT),
key = {"red", "yellow"}
))
public void listenerDirectQueue2(String msg){System.err.println("監(jiān)聽到 direct.queue2 的消息為:【"+ msg +"】");
}
編寫完代碼,我們重啟一下我們的消費者服務,然后我們看一下我們的RabbitMQ??梢钥吹剑藭r我們的交換機中,綁定的有兩個queue,其中queue1監(jiān)聽的RoutingKey有blue和red、queue2監(jiān)聽的RoutingKey有yellow和red。
我們也可以看看我們的queue,確實也多了倆,一個叫direct.queue1,一個叫direct.queue2。
步驟二、在Publisher服務中,編寫測試方法,向交換機exchange.direct發(fā)送消息。
@Test
public void testDirectExchange(){//交換機的名稱
String exchangeName = "exchange.direct";
//消息
String blueMsg = "Hello, Blue.";
String redMsg = "Hello, Red.";
String yellowMsg = "Hello, Yellow.";
//發(fā)送消息
for (int i = 0; i< 10; i++){if (i % 3 == 0){rabbitTemplate.convertAndSend(exchangeName, "blue", blueMsg);
}else if (i % 3 == 1){rabbitTemplate.convertAndSend(exchangeName, "yellow", yellowMsg);
}else {rabbitTemplate.convertAndSend(exchangeName, "red", redMsg);
}
}
}
運行我們的測試方法后,我們看一下Consumer服務的控制臺打印消息:
可以看到,direct.queue1 監(jiān)聽到的消息有 Hello, Red 和 Hello, Blue,而direct.queue2 監(jiān)聽到的消息有 Hello, Red 和 Hello, Yellow.
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧