10.RabbitMQ 路由模式

路由模式/Routing:

在这里插入图片描述
  跟订阅模式类似,只不过在订阅模式的基础上加上了类型,订阅模式是分发到所有绑定到交换机的队列,路由模式只分发到绑定在交换机上面指定路由键的队列。

RabbitMqConfig配置:

1、配置两个direct队列和交换机

/**
 * direct队列名称1
 */
public static final String DIRECT_QUEUE1="directQueue1";


/**
 * direct队列名称2
 */
public static final String DIRECT_QUEUE2="directQueue2";

/**
 * 定义一个direct1队列
 * @return
 */
@Bean
public Queue directQueue1(){
    return new Queue(DIRECT_QUEUE1);
}

/**
 * 定义一个direct2队列
 * @return
 */
@Bean
public Queue directQueue2(){
    return new Queue(DIRECT_QUEUE2);
}

/**
 * direct交换机名称
 */
public static final String DIRECT_EXCHANGE1="directExchange1";

/**
 * 定义一个direct交换机,点对点模式消息发送1
 * @return
 */
@Bean
public DirectExchange directExchange1(){
    return new DirectExchange(DIRECT_EXCHANGE1);
}

2、定义绑定key

/**
 * 定义一个direct队列和error绑定规则1
 * @return
 */
@Bean
public Binding directBinding1(){
    return BindingBuilder.bind(directQueue1()).to(directExchange1()).with("error");
}

/**
 * 定义一个direct队列和info绑定规则2
 * @return
 */
@Bean
public Binding directBinding2(){
    return BindingBuilder.bind(directQueue2()).to(directExchange1()).with("info");
}

/**
 * 定义一个direct队列和error绑定规则3
 * @return
 */
@Bean
public Binding directBinding3(){
    return BindingBuilder.bind(directQueue2()).to(directExchange1()).with("error");
}


/**
 * 定义一个direct队列和warning绑定规则4
 * @return
 */
@Bean
public Binding directBinding4(){
    return BindingBuilder.bind(directQueue2()).to(directExchange1()).with("warning");
}

生产者发送消息:

1、RabbitMqService接口创建方法

/**
 * 发送路由模式消息
 * @return
 */
public void sendRoutingMessage();

2、RabbitMqServiceImpl创建方法实现

/**
 * 发送路由模式消息
 * @return
 */
@Override
public void sendRoutingMessage() {
    amqpTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE1,"error","发送error级别的消息");
    amqpTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE1,"info","发送info级别的消息");
    amqpTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE1,"warning","发送warning级别的消息");
}

3、更改生产者代码

package com.java996.producer;

import com.java996.producer.Service.RabbitMqService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class ProducerApp {
    public static void main(String[] args) {
     ConfigurableApplicationContext context = SpringApplication.run(ProducerApp.class,args);
        RabbitMqService rabbitMqService = (RabbitMqService) context.getBean("RabbitMqService");
        rabbitMqService.sendRoutingMessage();
    }
}

4、交换机的绑定关系
在这里插入图片描述
5、队列
在这里插入图片描述

消费者接收消息:

1、RabbitMqServiceImpl更改之前的接收方法

@Override
@RabbitListener(queues = {RabbitMqConfig.DIRECT_QUEUE1}) //监听队列
public void receiveMessage2(String message) {
    //System.out.println("消费者1,接收到的消息:"+message);
    System.out.println("队列1,接收到的消息:"+message);
}

@Override
@RabbitListener(queues = {RabbitMqConfig.DIRECT_QUEUE2}) //监听队列
public void receiveMessage3(String message) {
    //System.out.println("消费者2,接收到的消息:"+message);
    System.out.println("队列2,接收到的消息:"+message);
    
}

测试接收消息:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值