• 实战:springboot整合rabbitMQ


    一、RabbitMQ简述与其docker安装
    这里主要讲解实战整合rabbitMQ,了解RabbitMQ简述与其docker安装请点击:传送门
    二、springboot整合rabbitMQ
    1.新建springboot项目
    2.pom:主要添加以下两个依赖

          
            org.springframework.boot
            spring-boot-starter-web
            2.2.2.RELEASE
          
          
            
                org.springframework.boot
                spring-boot-starter-amqp
                2.5.5
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.yaml:

    server:
      port: 5672
    
    spring:
      rabbitmq:
        host: 192.168.80.88  #mq服务器ip,默认为localhost
    #    port: 5672          #mq服务器port,默认为5672
    #    username: guest     #mq服务器username,默认为gust
    #    password: guest     #mq服务器password,默认为guest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4.主启动类:

    @SpringBootApplication
    public class RabbitMqMain5672 {
        public static void main(String[] args) {
            SpringApplication.run(RabbitMqMain5672.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5.业务类发送消息:

    5.1先说一下RabbitTemplate发送消息的两个方法:

    1. sent():Message需要自己构造
      在这里插入图片描述

    2. (常用) convertAndSent(): message自动序列化发送给MQ
      在这里插入图片描述
      5.2代码:

      @SpringBootTest
      class MyRabbitmqTest {
      @Autowired
      RabbitTemplate rabbitTemplate;

      @Test
      public void myTest(){
          ConcurrentHashMap myMap = new ConcurrentHashMap();
          myMap.put(0,"神司马懿");
          myMap.put(1,"界徐盛");
          myMap.put(2,"曹钝");
          myMap.put(3,"骆统");
          rabbitTemplate.convertAndSend("swl.direct","1",myMap);
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      }

    5.3 登录rabbitMq验证:
    发现名为swl.direct的exchage发送给了queue1一条消息;但是发现内容是一堆乱码(后面第7节会解释原因)
    在这里插入图片描述

    6.业务类接受消息:

    6.1先看一下RabbitTemplate收消息的两个方法:可以看到receive转化为Message,而receiveAndConvert转化为Object
    在这里插入图片描述
    6.2 代码:

        @Test
        public void receiveTest(){
            Object o = rabbitTemplate.receiveAndConvert("swl.queue1");
            String s = o.toString();
            System.out.println(s);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行发现收到一条消息:
    在这里插入图片描述
    再去mq看发现队列swl.queue1中的消息已被消费,队列变空了
    在这里插入图片描述

    7.更改序列化的方式
    7.1为什么为乱码呢?打开RabbitTemplate的源码,可见Rabbitmq默认用的是SimpleMessageConverter()序列化;
    在这里插入图片描述
    7.2另外我们实际开发中发送接受的消息一般为json,我们可以换个序列化方式:我们看到MessageConverter接口的实现类有多个我们选择Jackson2JsonMessageConverter
    在这里插入图片描述7.3新增配置类代码:

    @Configuration
    public class MyMqconfig {
        @Bean
        public MessageConverter getMessageConverter(){
            return new Jackson2JsonMessageConverter();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7.4再次发送数据,发现已经为json格式,除了集合外,实体类也可以
    在这里插入图片描述
    解释一下为什么将我们设置的MessageConverter 放入容器就可以代替原来的SimpleMessageConverter();看RabbitAutoConfiguration源码发现
    在这里插入图片描述其实我们重写RabbitTemplate也可以的
    在这里插入图片描述
    8.设置监听
    在一个方法上添加@RabbitListener参数为队列的名,方法参数就是收到的消息。

    @Service
    public class MyRabbitmq {
    
        @RabbitListener(queues = "swl.queue1")
        public void doSomeThing(Object object){
            System.out.println("收到!"+object.toString());
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    9.amqp创建exchage与queue
    前面的exchage与queue都是在rabbitMq的控制台创建好的,amqpAdmin可以用在代码创建exchage与queue amqpAdmin与rabbitTemplate一样也是RabbitAutoConfiguration自动注入的组件

    新建exchage、新建queue、新建binding即可

        @Test
        public void creatExchage(){
            DirectExchange directExchange = new DirectExchange("Exchange666");
            amqpAdmin.declareExchange(directExchange);
            Queue queue111 = new Queue("queue111");
            amqpAdmin.declareQueue(queue111);
            amqpAdmin.declareBinding(new Binding("queue111",Binding.DestinationType.QUEUE,"Exchange666","1", null));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    vue中预览docx
    入门安全测试?从渗透测试开始做起....
    好消息!终于解决了!Coze工作流错误中断问题终于得到解决!
    uniCloud云开发获取小程序用户openid
    18、ajax、fetch、axios区别
    俄罗斯方块游戏的设计与实现(Java+Swing+Eclipse)
    类和对象(中下)
    Git常用命令
    git工具打标签使用说明---git tag----
    Docker 部署 Redis 服务
  • 原文地址:https://blog.csdn.net/iijik55/article/details/126081142