1、简介
在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。
2、特点
在Direct模型下:
队列与交换机的绑定,不能是任意绑定了,而是要指定一个
RoutingKey
(路由key)消息的发送方在 向 Exchange发送消息时,也必须指定消息的
RoutingKey
。Exchange不再把消息交给每一个绑定的队列,而是根据消息的
Routing Key
进行判断,只有队列的Routingkey
与消息的Routing key
完全一致,才会接收到消息
3、设置队列
4、设置交换机
5、绑定队列
6、设置生产者
java
@Test
void testSendDirect1() {
String exchangeName = "test.direct";
String msg = "红色通知";
rabbitTemplate.convertAndSend(exchangeName, "red", msg);
}
@Test
void testSendDirect2() {
String exchangeName = "test.direct";
String msg = "蓝色通知";
rabbitTemplate.convertAndSend(exchangeName, "blue", msg);
}
@Test
void testSendDirect3() {
String exchangeName = "test.direct";
String msg = "黄色通知";
rabbitTemplate.convertAndSend(exchangeName, "yellow", msg);
}
7、设置消费者
java
@RabbitListener(queues = "direct.queue1")
public void listenDirectQueue1(String msg) {
System.out.println("消费者1接收到direct.queue1的消息:【" + msg + "】");
}
@RabbitListener(queues = "direct.queue2")
public void listenDirectQueue2(String msg) {
System.out.println("消费者2接收到direct.queue2的消息:【" + msg + "】");
}
8、测试
9、总结
Direct交换机与Fanout交换机的差异?
Fanout交换机将消息路由给每一个与之绑定的队列
Direct交换机根据RoutingKey判断路由给哪个队列
如果多个队列具有相同的RoutingKey,则与Fanout功能类似