Direct Exchange会将接收到的消息根据规则路由到指定的Queue,因此称为定向路由。
- 每一个Queue都与Exchange设置一个BindingKey
- 发布者发送消息时,指定消息的RoutingKey
- Exchange将消息路由到BindingKey与消息RoutingKey一致的队列

新建2个队列

新建一个direct交换机

使用Routing key,direct交换机绑定指定队列

SpringRabbitListener
package com.itheima.consumer.listeners;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class MqListener {
// 利用RabbitListener来声明要监听的队列信息
// 将来一旦监听的队列中有了消息,就会推送给当前服务,调用当前方法,处理消息。
// 可以看到方法体中接收的就是消息体的内容
@RabbitListener(queues = "direct.queue1")
public void listendirectQueue1(String msg) {
System.out.println("消费者1接收到direct消息:【" + msg + "】");
}
@RabbitListener(queues = "direct.queue2")
public void listendirectQueue2(String msg) {
System.out.println("消费者2接收到direct消息:【" + msg + "】");
}
}SpringAmqpTest
package com.itheima.publisher;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class SpringAmqpTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testDirectExchange() {
// 交换机名称
String exchangeName = "hmall.direct";
// 消息
String message = "红色警报,由于日本排放核污水,惊现哥斯拉!";
rabbitTemplate.convertAndSend(exchangeName, "red", message);
}
}消费者收到的消息:

package com.itheima.publisher;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class SpringAmqpTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testDirectExchange2() {
// 交换机名称
String exchangeName = "hmall.direct";
// 消息
String message = "蓝色警报,警报解除,哥斯拉是放的气球!";
rabbitTemplate.convertAndSend(exchangeName, "blue", message);
}
}消费者收到的消息:

package com.itheima.publisher;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class SpringAmqpTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testDirectExchange3() {
// 交换机名称
String exchangeName = "hmall.direct";
// 消息
String message = "黄色警报,警报暂除,哥斯拉暂没出现!";
rabbitTemplate.convertAndSend(exchangeName, "yellow", message);
}
}