Spring Boot集成RocketMQ之消息对象序列化

以下源码基于rocketmq-spring-boot-start 2.1.1版本,其它版本可能会有差异

一. 前言

当我们在Spring Boot项目中集成RocketMQ后,只需要在配置文件(application.yml)中添加rocketmq的相关配置,即可使用rocketMQTemplate发送对象消息。登录RocketMq Dashborad查看消息会发现我们的对象消息被序列化成json串。那它是使用哪种json序列化工具的呢?

二. 如何序列化

第一步,Spring Boot将Object封装成Message对象,但此时Object还没有被序列化。

第二步,将Spring Boot封装的Message对象转换成RocketMQ的Message对象,在此过程中进行序列化操作。

最终通过messageConverter将Spring Boot的Message对象转换成json串,然后构建RocketMQ的Message对象。那messageConverter从哪里来的呢?

三. Spring Boot加载MessageConverter

在rocketmq-spring-boot的jar包中有spring.factories和spring-autoconfigure-metadata.properties两个配置文件。spring.factories中指定了rocketmq的自动装配类RocketMQAutoConfiguration。spring-autoconfigure-metadata.properties中指定了在装配RocketMQAutoConfiguration前必需先装配MessageConverterConfiguration。

先看RocketMQAutoConfiguration配置类,该配置类中装配了我们发送MQ消息的模板类RocketMQTemplate

装配RocketMQTemplate需要依赖RocketMQMessageConverter,该类则是由MessageConverterConfiguration进行装配。

这里直接new了一个RocketMQMessageConverter。

在RocketMQMessageConverter的构造方法中为我们构造了一个CompositeMessageConverter, 而CompositeMessageConverter实际是多个MessageConverter的组合类。其中依次添加了ByteArrayMessageConverter、StringMessageConverter、MappingJackson2MessageConverter、MappingFastJsonMessageConverter四个消息转换类。

在使用CompositeMessageConverter进行消息序列化时依次使用以上四个消息转换类进行消息对象的序列化,若序列化成功则直接返回,否则继续使用下一个MessageConverter对消息进行序列化。

四. 总结

Spring Boot在装配RocketMQTemplate时为我们提供了四种消息对象转换类,当发送消息时依次有序的使用四种消息转换类对消息进行序列化,直到找到一个合适的消息转换类。在Spring Boot中一般都会集成JackSon,所以在没有特别配置时,发送的消息会使用JackSon序列化为json串。

五. 扩展

在MessageConverterConfiguration自动装配类中有ConditionalOnMissingBean注解,故在实际应用中若需要自定义消息对象的序列化方式,则可以自己装配RocketMQMessageConverter。

相关推荐
凤山老林5 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne6 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
省钱兄--zs6 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
silvamux_10 小时前
Spring Boot 调用大模型 api 最小可跑教程
java·spring boot·后端
今年下半年10 小时前
【Spring Boot 】通过 OpenFeign 请求第三方接口
java·spring boot·后端·openfeign
三翼鸟数字化技术团队10 小时前
Springboot + WebFlux + Disruptor 实现数据转发
java·spring boot
今年下半年12 小时前
【短信发送】Spring Boot整合多种短信接口的实现(附源码)
java·spring boot·后端·sms·qcloudsms
ly768912 小时前
PostgreSQL JSONB 在 Spring Boot 中的读写边界:从 JDBC 类型映射到 GIN 索引失效
spring boot·postgresql·gin·jsonb·pgjdbc·gin 索引
IT研究室13 小时前
最新计算机毕业设计选题推荐-基于spring boot的美食配送平台-网站-文档指导-Java-springboot
java·spring boot·课程设计
省钱兄--zs15 小时前
无人自助拼豆系统架构设计与功能实现落地部署全流程实战指南
java·数据仓库·spring boot·系统架构·需求分析