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。

相关推荐
一 乐10 小时前
物流信息管理|基于springboot + vue物流信息管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·物流信息管理系统
希望永不加班12 小时前
SpringBoot 自动配置类加载顺序与优先级
java·spring boot·后端·spring·mybatis
希望永不加班14 小时前
SpringBoot 事件机制:ApplicationEvent 与监听器
java·开发语言·spring boot·后端·spring
却话巴山夜雨时i14 小时前
互联网大厂Java面试实录:技术栈解析与场景剖析
java·大数据·spring boot·spring cloud·微服务·ai·面试
gelald15 小时前
SpringBoot - 配置加载
spring boot·后端·spring
海南java第二人16 小时前
Spring Boot + Cursor 实战:从零到一搭建一个生产级用户中心
spring boot·ai coding
昵称为空C16 小时前
在复杂SpringBoot项目中基于hutool实现临时添加多数据源案例
spring boot·后端
计算机学姐17 小时前
基于SpringBoot的房屋交易系统
java·vue.js·spring boot·后端·spring·intellij-idea·mybatis
java1234_小锋17 小时前
SpringBoot 4 + Spring Security 7 + Vue3 前后端分离项目设计最佳实践
spring boot·后端·spring