实战: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
        

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

4.主启动类:

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

5.业务类发送消息:

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

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

  2. (常用) convertAndSent(): message自动序列化发送给MQ
    实战:springboot整合rabbitMQ_第1张图片
    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);
    }
    

    }

5.3 登录rabbitMq验证:
发现名为swl.direct的exchage发送给了queue1一条消息;但是发现内容是一堆乱码(后面第7节会解释原因)
实战:springboot整合rabbitMQ_第2张图片

6.业务类接受消息:

6.1先看一下RabbitTemplate收消息的两个方法:可以看到receive转化为Message,而receiveAndConvert转化为Object
实战:springboot整合rabbitMQ_第3张图片
6.2 代码:

    @Test
    public void receiveTest(){
        Object o = rabbitTemplate.receiveAndConvert("swl.queue1");
        String s = o.toString();
        System.out.println(s);
    }

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

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

@Configuration
public class MyMqconfig {
    @Bean
    public MessageConverter getMessageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

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

@Service
public class MyRabbitmq {

    @RabbitListener(queues = "swl.queue1")
    public void doSomeThing(Object object){
        System.out.println("收到!"+object.toString());
    }

}

在这里插入图片描述

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));
    }

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

你可能感兴趣的:(面试,学习路线,阿里巴巴,android,前端,后端)