前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战:springboot整合rabbitMQ「建议收藏」

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

作者头像
全栈程序员站长
发布2022-08-28 09:14:03
3230
发布2022-08-28 09:14:03
举报
文章被收录于专栏:全栈程序员必看

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

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

代码语言:javascript
复制
      <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:

代码语言:javascript
复制
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.主启动类:

代码语言:javascript
复制
@SpringBootApplication
public class RabbitMqMain5672 { 
   
    public static void main(String[] args) { 
   
        SpringApplication.run(RabbitMqMain5672.class,args);
    }
}

5.业务类发送消息:

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

  1. sent():Message需要自己构造
在这里插入图片描述
在这里插入图片描述
  1. (常用) convertAndSent(): message自动序列化发送给MQ
在这里插入图片描述
在这里插入图片描述

5.2代码:

代码语言:javascript
复制
@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 代码:

代码语言:javascript
复制
    @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新增配置类代码:

代码语言:javascript
复制
@Configuration
public class MyMqconfig { 
   
    @Bean
    public MessageConverter getMessageConverter(){ 
   
        return new Jackson2JsonMessageConverter();
    }
}

7.4再次发送数据,发现已经为json格式,除了集合外,实体类也可以

在这里插入图片描述
在这里插入图片描述

解释一下为什么将我们设置的MessageConverter 放入容器就可以代替原来的SimpleMessageConverter();看RabbitAutoConfiguration源码发现

在这里插入图片描述
在这里插入图片描述

其实我们重写RabbitTemplate也可以的

在这里插入图片描述
在这里插入图片描述

8.设置监听 在一个方法上添加@RabbitListener参数为队列的名,方法参数就是收到的消息。

代码语言:javascript
复制
@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即可

代码语言:javascript
复制
    @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.cn/146743.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档