RabbitMQ:SpringAMQP Direct Exchange(直连型交换机)
目录
- 一、案例需求
- 二、基础配置
- 三、代码实现
直连型交换机也叫做定向交换机
,通过RoutingKey
绑定交换机与队列直接的关系。
生产者源码
消费者源码
一、案例需求
- 在RabbitMQ控制台中,声明队列
direct.queue1
和direct.queue2
。 - 在RabbitMQ控制台中,声明交换机
mt.direct
,将队列direct.queue1
和direct.queue2
绑定到交换机上。 - 在生产者服务中,利用不同的
RoutingKey
向mt.direct
发送消息。 - 在消费者服务中,编写两个消费者方法,分别监听队列
direct.queue1
和direct.queue2
。
二、基础配置
首先创建两个队列direct.queue1
和direct.queue2
在创建一个定向交换机mt.direct
,需要注意的是,在创建交换机的时候需要修改交换机的类型direct定向交换机。
交换机创建之后,点击交换机的名称,绑定交换机与队列之间的关系。这里需要注意的是,绑定关系的时候需要指定RoutingKey
,并且RoutingKey有且只能填写一个,如果有多个的时候需要再绑定依次
。
三、代码实现
生产者
/**
* 给交换机发送消息(定向交换机)
* @throws InterruptedException
*/
@Test
public void directExchangeTest() throws InterruptedException {String exchangeName = "mt.direct";// String message = "红色警报 ......";
// rabbitTemplate.convertAndSend(exchangeName, "red", message);// String message = "蓝色警报 ......";
// rabbitTemplate.convertAndSend(exchangeName, "blue", message);String message = "黄色警报 ......";rabbitTemplate.convertAndSend(exchangeName, "yellow", message);
}
消费者
@RabbitListener(queues = "direct.queue1")
public void listenDirecttQueue1(String message) throws InterruptedException {System.out.println(String.format("消费者1,收到了direct.queue1: %s", message));
}@RabbitListener(queues = "direct.queue2")
public void listenDirecttQueue2(String message) throws InterruptedException {System.err.println(String.format("消费者2,收到了direct.queue2: %s", message));
}