前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RabbitMQ03-交换器【direct】介绍

RabbitMQ03-交换器【direct】介绍

作者头像
用户4919348
发布2019-05-23 11:16:35
6090
发布2019-05-23 11:16:35
举报
文章被收录于专栏:波波烤鸭波波烤鸭

交换器介绍

  RabbitMQ中有三种主要的交互器分别如下

交换器

说明

direct

发布与订阅 完全匹配

fanout

广播

topic

主体,规则匹配

direct案例

  DirectExchange 路由策略是将消息队列绑定到 DirectExchange 上,当 一条消息到达DirectExchange 时会被转发到与该条消息 routing key 相同的 Queue 上,例如消息队列名为“hello-queue ”,则 routingkey 为“hello-queue ”的消息会被该消息队列接收。

在这里插入图片描述
在这里插入图片描述

1.创建消费者

  创建一个SpringBoot项目作为消费者项目具体如下

1.1创建项目并添加依赖
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
<dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-amqp</artifactId>
     </dependency>
 </dependencies>
1.2参数设置

  在application.properties中添加如下配置信息

代码语言:javascript
复制
spring.application.name=springcloud-mq
spring.rabbitmq.host=192.168.88.150
spring.rabbitmq.port=5672
spring.rabbitmq.username=dpb
spring.rabbitmq.password=123

#设置交换器的名称
mq.config.exchange=log.direct

#info 队列名称
mq.config.queue.info=log.info
#info 路由键
mq.config.queue.info.routing.key=log.info.routing.key

#error 队列名称
mq.config.queue.error=log.error
#error 路由键
mq.config.queue.error.routing.key=log.error.routing.key
1.3创建消费者工具类型

info信息的消费者

代码语言:javascript
复制
/**
 * @program: rabbitmq-direct-consumer
 * @description: 消息接收者
 * @author: 波波烤鸭
 * @create: 2019-05-22 13:59
 * @RabbitListener bindings:绑定队列
 * @QueueBinding value:绑定队列的名称
 * exchange:配置交换器
 *
 *  @Queue value:配置队列名称
 *  autoDelete:是否是一个可删除的临时队列
 *
 *  @Exchange value:为交换器起个名称
 *  type:指定具体的交换器类型
 */
@Component
@RabbitListener(
        bindings=@QueueBinding(
                value=@Queue(value="${mq.config.queue.info}",autoDelete="true"),
                        exchange=@Exchange(value="${mq.config.exchange}",type= ExchangeTypes.DIRECT),
                        key="${mq.config.queue.info.routing.key}"
                )
        )
public class InfoReceiver {

    /**
     * 接收消息的方法。采用消息队列监听机制
     * @param msg
     */
    @RabbitHandler
    public void process(String msg){
        System.out.println("Info........receiver: "+msg);
    }
}

error信息的消费者

代码语言:javascript
复制
/**
 *
 * @program: rabbitmq-direct-consumer
 * @description: 消息接收者
 * @author: 波波烤鸭
 * @create: 2019-05-22 13:59
 *
 *
 * @RabbitListener bindings:绑定队列
 * @QueueBinding value:绑定队列的名称
 * exchange:配置交换器
 *
 *  @Queue value:配置队列名称
 *  autoDelete:是否是一个可删除的临时队列
 *
 *  @Exchange value:为交换器起个名称
 *  type:指定具体的交换器类型
 */
@Component
@RabbitListener(
        bindings=@QueueBinding(
                value=@Queue(value="${mq.config.queue.error}",autoDelete="true"),
                        exchange=@Exchange(value="${mq.config.exchange}",type= ExchangeTypes.DIRECT),
                        key="${mq.config.queue.error.routing.key}"
                )
        )
public class ErrorReceiver {

    /**
     * 接收消息的方法。采用消息队列监听机制
     * @param msg
     */
    @RabbitHandler
    public void process(String msg){
        System.out.println("Error........receiver: "+msg);
    }
}
1.4启动

  创建启动类,然后启动服务接收消息

代码语言:javascript
复制
@SpringBootApplication
public class RabbitmqDirectConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(RabbitmqDirectConsumerApplication.class, args);
    }

}

2.创建服务提供者

2.1 创建项目

  创建一个SpringBoot项目作为服务提供者。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
<dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-amqp</artifactId>
     </dependency>
 </dependencies>
2.2 添加配置
代码语言:javascript
复制
spring.application.name=springcloud-mq
spring.rabbitmq.host=192.168.88.150
spring.rabbitmq.port=5672
spring.rabbitmq.username=dpb
spring.rabbitmq.password=123
#设置交换器的名称
mq.config.exchange=log.direct
#info 路由键
mq.config.queue.info.routing.key=log.info.routing.key
#error 路由键
mq.config.queue.error.routing.key=log.error.routing.key
2.3 创建发送消息的工具类
代码语言:javascript
复制
/**
 * @program: rabbitmq-direct-provider
 * @description: 消息发送者
 * @author: 波波烤鸭
 * @create: 2019-05-22 14:06
 */
@Component
public class Sender {

    @Autowired
    private AmqpTemplate rabbitAmqpTemplate;

    @Value("${mq.config.exchange}")
    private String exchange;

    @Value("${mq.config.queue.info.routing.key}")
    private String routingKey;

    public void send(String msg){
        // 发送消息
        this.rabbitAmqpTemplate.convertAndSend(exchange,routingKey,msg);
    }

}
2.4 单元测试
代码语言:javascript
复制
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitmqDirectProviderApplication.class)
public class RabbitmqDirectProviderApplicationTests {

    @Autowired
    private Sender sender;

    @Test
    public void contextLoads() throws Exception{
        while(true){
            Thread.sleep(1000);
            sender.send("direct:你好啊 "+new Date());
        }
    }
}
在这里插入图片描述
在这里插入图片描述

改变发送的 routing-key

在这里插入图片描述
在这里插入图片描述

搞定~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年05月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 交换器介绍
    • direct案例
      • 1.创建消费者
      • 2.创建服务提供者
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档