RabbitMQ玩Topic主题模式

这个功能需求一直都在,最近也是忙着写业务代码没来得及做实验demo的小总结,这个功能在以前用过的功能中就是关注频道的推送。国庆节终于有空了,就着自己机器的小例子来记录一下~
基本的搭建和基本概念不再说,可以看:

RabbitMQ在SpringBoot中的简单使用
RabbitMQ的几个重要基础概念!没看之前不要说搭MQ用MQ!

直接开始:

(1)Controller中:

@Autowired
    private RabbitMqService rabbitMqService;

@GetMapping("/rabbitMq1")
    public void rabbitMq1(){
        String s = rabbitMqService.sendTopicData1();
        System.out.println("学习频道发送:"+s);
    }
    @GetMapping("/rabbitMq2")
    public void rabbitMq2(){
        String s = rabbitMqService.sendTopicData2();
        System.out.println("测验频道发送:"+s);
    }

(2)rabbitMqService中:

@Service
public class RabbitMqService {
    @Autowired
    RabbitTemplate rabbitTemplate;

    public String sendTopicData1() {
        String randomNumber = new String(UUID.randomUUID().toString()+":学习数学频道");
        rabbitTemplate.convertAndSend("learn_math","learn.math",randomNumber);
        return randomNumber;
    }

    public String sendTopicData2() {
        String randomNumber = new String(UUID.randomUUID().toString()+":数学测验频道");
        rabbitTemplate.convertAndSend("test_math","test.math",randomNumber);
        return randomNumber;
    }
}

(3)MQ消费端采用监听器方式(自动应答模式):

 @RabbitListener(bindings = @QueueBinding(value = @Queue(value = "jojo_subject"),key = "learn.math",
            exchange = @Exchange(value = "learn_math",type = "topic")))
    @RabbitHandler
    public void topicHandle(@Payload String msg, @Headers Map<String,Object> headers) throws IOException {
        Long tag = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);
        try {
            System.out.println("学习频道获取信息:"+msg);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e);
        }
    }

    @RabbitListener(bindings = @QueueBinding(value = @Queue(value = "jojo_subject2"), key = "test.math",
            exchange = @Exchange(value = "test_math",type = "topic")))
    @RabbitHandler
    public void topicMsg(String a){
        System.out.println("数学测验频道收到:"+a);
    }

(4)MQ的控制台中配置:

在这里插入图片描述

learn_math:

在这里插入图片描述

test_math:

在这里插入图片描述

(4)测试:

按道理说,我这里让测试数学的频道关注了所有math结尾的路由key,但是学习数学频道只关注绑定了学习的路由key。那么正常理想的状态就是:数学测试频道发送的消息,学习队列和测试队列都能收到。但是学习频道发的消息,仅仅是学习频道获取得到~
开始!

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

正确!再试试!

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

正确!打完收工!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值