当前位置: 首页 > article >正文

RabbitMQ消息转换器

在当你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。

只不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题:数据体积过大,有安全漏洞,可读性差。

比如当我们发送一个复杂结构对象时:

@Test
public void testSendMap() throws InterruptedException {
    // 准备消息
    Map<String,Object> msg = new HashMap<>();
    msg.put("name", "张三");
    msg.put("age", 18);
    // 发送消息
    rabbitTemplate.convertAndSend("object.queue", msg);
}

mq接受的消息则是这样的:

 堪比三年模拟五年高考,又臭又长。

使用我们这里可以使用一个JSON转换器。可以使消息体的体积更小、可读性更高。

首先,在publisherconsumer两个服务中都引入依赖:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.10</version>
</dependency>

如果项目中引入了spring-boot-starter-web依赖,则无需再次引入Jackson依赖。

配置消息转换器,在publisherconsumer两个服务的启动类中添加一个Bean:

@Bean
public MessageConverter messageConverter(){
    // 1.定义消息转换器
    Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();
    // 2.配置自动创建消息id,用于识别不同消息,也可以在业务中基于ID判断是否是重复消息
    jackson2JsonMessageConverter.setCreateMessageIds(true);
    return jackson2JsonMessageConverter;
}

再次测试:

@Test
public void testSendMap() throws InterruptedException {
    // 准备消息
    Map<String,Object> msg = new HashMap<>();
    msg.put("name", "柳岩");
    msg.put("age", 21);
    // 发送消息
    rabbitTemplate.convertAndSend("object.queue", msg);
}

结果,非常简洁。 


http://www.kler.cn/a/313629.html

相关文章:

  • Postman上传图片如何处理
  • 06.VSCODE:备战大项目,CMake专项配置
  • 【面试题】发起一次网络请求,当请求>=1s,立马中断
  • 虚幻引擎 CEO 谈元宇宙:发展、策略与布局
  • 什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性
  • JFROG相关API
  • 一条sql是如何执行的详解
  • Win10 安装Node.js 以及 Vue项目的创建
  • 构建现代应用的Python Serverless架构详解
  • Python中 BeautifulSoup和Selenium 定位元素和获取元素值的方法
  • 【JAVA入门】Day48 - 线程池
  • 《使用 LangChain 进行大模型应用开发》学习笔记(五)
  • elasticsearch同步mysql方案
  • 独立站技能树/工具箱1.0 总纲篇丨出海笔记
  • Centos7更换阿里云的 YUM 镜像仓库
  • K8S - Access Control 机制介绍
  • Oracle11g安装配置详细教程
  • [数据集][目标检测]智慧交通铁轨裂缝检测数据集VOC+YOLO格式4类别
  • 关于网络、模型、算法的一些理论知识补充(重新在概念上定义自己研究的方向!!!)
  • 多目标优化算法求解LSMOP(Large-Scale Multi-Objective Optimization Problem)测试集,MATLAB代码
  • go testing 包
  • Python Web 中间件开发与优化指南
  • Java项目实战II基于Java+Spring Boot+MySQL的校园社团信息管理系统(源码+数据库+文档)
  • VMware安装rustdesk服务器
  • 堆的向下调整算法和TOPK问题
  • 互联网应用安全