实战: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Python】python面试题

    【Python】python面试题一些Python面试题注:本面试题来源于网络,部分内容摘自http://www.cnblogs.com/goodhacker/p/3366618.html1.(1)python下多线程的限制以及

    2022年7月5日
    25
  • 逻辑漏洞之密码找回漏洞(semcms)「建议收藏」

    逻辑漏洞之密码找回漏洞(semcms)「建议收藏」目录什么是密码找回漏洞一般流程可能产生该漏洞的情况脑洞图1.用户凭证暴力破解2.返回凭证3.邮箱弱token4.用户凭证有效性5.重新绑定6.服务器验证7.用户身份验证8.找回步骤9.本地验证10.注入11.Token生成12.注册覆盖13.session覆盖演示暴破验证码找回密码更改id号修改admin密码靶场cms下载什么是密码找回漏洞利用漏洞修改他人帐号密码,甚至修改管理员的密码。一般流程1首先尝试正常找回密码流程,选择不同的找回方式,记录所有数据包2分析数据包,找到敏感部分3

    2022年4月30日
    75
  • 移动通信网络架构[通俗易懂]

    移动通信网络架构[通俗易懂]帮大家梳理一下无线侧接入网+承载网+核心网的架构,这里以接入网为主,其他两个网络的很多技术细节由于笔者研究的并不足够深入,因此以帮助大家入门为主。在我们正式讲解之前,我想通过这张网络简图帮助大家认识一下全网的网络架构,通过对全网架构的了解,将方便您对后面每一块网络细节的理解。这张图分为左右两部分,右边为无线侧网络架构,左边为固定侧网络架构。无线侧:手机或者集团客户通过基站接入到无线接入网,在接入网侧可以通过RTN或者IPRAN或者PTN解决方案来解决,将信号传递给BSC/RNC。在将信号..

    2022年9月22日
    4
  • k8s 微服务打包上传私库、部署、发布

    k8s 微服务打包上传私库、部署、发布微服务打包上传私库、部署、发布1.Ideamaven打包修改配置文件yml的eureka地址:http://10.0.0.111:11111/eurekaMaven打成jar包。2.

    2022年7月1日
    27
  • 控件视图的实现原理[建议收藏]

    控件类的实现原理:CTreeCtrlTreeCtrl=*(CTreeCtrl*)CTreeView;实现条件:CTreeCtrl类中没有虚函数和成员变量由于CTreeCtrl类中没有虚函数

    2021年12月18日
    50
  • Mac下SVN基本操作和常见错误

    Mac下SVN基本操作和常见错误

    2021年10月20日
    45

发表回复

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

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