RabbitMQ玩Topic主题模式

    科技2022-07-10  132

    这个功能需求一直都在,最近也是忙着写业务代码没来得及做实验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。那么正常理想的状态就是:数学测试频道发送的消息,学习队列和测试队列都能收到。但是学习频道发的消息,仅仅是学习频道获取得到~
    开始!

    正确!再试试!

    正确!打完收工!
    Processed: 0.014, SQL: 8