RabbitMQ:SpringBoot+RabbitMQ Direct Exchange(直连型交换机)

发布于:2025-08-20 ⋅ 阅读:(20) ⋅ 点赞:(0)


直连型交换机也叫做定向交换机,通过RoutingKey绑定交换机与队列直接的关系。

生产者源码
消费者源码

一、案例需求

  1. 在RabbitMQ控制台中,声明队列direct.queue1direct.queue2
  2. 在RabbitMQ控制台中,声明交换机mt.direct,将队列direct.queue1direct.queue2绑定到交换机上。
  3. 在生产者服务中,利用不同的RoutingKeymt.direct发送消息。
  4. 在消费者服务中,编写两个消费者方法,分别监听队列direct.queue1direct.queue2

在这里插入图片描述

二、基础配置

首先创建两个队列direct.queue1direct.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));
}

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到