实战:springboot整合rabbitMQ「建议收藏」

实战:springboot整合rabbitMQ「建议收藏」一、RabbitMQ简述与其docker安装这里主要讲解实战整合rabbitMQ,了解RabbitMQ简述与其docker安装请点击:传送门二、springboot整合rabbitMQ1.新建springboot项目2.pom:主要添加以下两个依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-

大家好,又见面了,我是你们的朋友全栈君。

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

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.2.RELEASE</version>
      </dependency>
      
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
            <version>2.5.5</version>
        </dependency>

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
    在这里插入图片描述
    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节会解释原因)
在这里插入图片描述

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

运行发现收到一条消息:
在这里插入图片描述
再去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();
    }
}

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

}

在这里插入图片描述

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));
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146743.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vim输入中文变为乱码

    vim输入中文变为乱码

    2021年8月25日
    53
  • 五种经典网页布局设计方法_网页布局类型及实例

    五种经典网页布局设计方法_网页布局类型及实例不得不说,网页设计绝对是有套路的!网页布局虽然千变万化,但是如果你仔细观察,会发现有一些布局适用范畴相当广,经久不衰。今天的文章,我们就来聊一下5种经典的网页布局。在开始一个新的网页设计项目的时候,不知道你会不会有那么一瞬间的犹豫:“这个项目要从哪里着手呢?”伴随着这种犹豫的,是“做点前所未有的作品”的冲动。不过,很多时候,这些冲动和犹豫都在需求的磨合、设计的细化中,逐步淡化。相比大家也都发现了,…

    2025年6月8日
    0
  • docker镜像重启_docker怎么启动镜像

    docker镜像重启_docker怎么启动镜像docker常见镜像安装总结

    2022年9月22日
    0
  • C++简单有趣的恶搞问答关机程序

    C++简单有趣的恶搞问答关机程序点进来的朋友首先反思一下自己:为什么进了CSDN这样一个学习的社区却还要来看我这种无聊的额恶搞程序呢?哈哈!我来替你们回答吧——因为无聊呗!没错,我也是无聊,五一假期显得无聊,看到高中班群实在安静决定写个小程序恶搞一下班级同学。闲话不多说,先来看一下效果吧!当你的同学收到.exe的可执行文件之后双击,首先他看到的是这样的界面:好吧,看到题目一句一句的跳出,如果你是我同学,估计你也应该开始…

    2022年7月22日
    18
  • 一、NSIS介绍_胡沈员介绍

    一、NSIS介绍_胡沈员介绍概述最近需要写一个安装程序,比对了一下现有的安装工具,最后选定了NSIS,最主要的原因一是开源、二是灵活。下面把我的要求简单列举下:1、需要检查系统环境是否满足要求2、需要界面友好的安装过程

    2022年8月4日
    7
  • 开启2019,依然在路上

    依然在路上,享受每一天这一年,简单做,坚持做,沉下心,等待花开。现在已经是2019年2月份了,过完了年,开始上班了,回想过年的那些日子,真的是简单和快乐,如果经常看我博客的伙伴一定知道,我2018年写过很多次我的精神状态(有点抑郁),我很多次调整自己,尝试让自己快乐一点,但是一直很难摆脱那种心理消极不开心的状态。好在我陷入的不是很深,现在我感觉自己已经差不多走出来了,当我这段时间去回想2…

    2022年2月27日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号