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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/291871.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Spring 原理] 依赖查找

在Spring框架中,依赖注入是一项非常重要的功能,它能够帮助我们解决对象之间的依赖关系。而其中的doResolveDependency方法是Spring框架中执行依赖注入的核心方法之一。本篇博客将对doResolveDependency方法进行详细介绍,帮助读者更好地理解和…

【数据结构】五、数组与广义表

目录 一、定义 二、计算数组元素地址 三、稀疏矩阵快速转置 稀疏矩阵的表示 稀疏矩阵快速转置 四、广义表 一、定义 我们所熟知的一维、二维数组的元素是原子类型。广义表中的元素除了原子类型还可以是另一个线性表。当然所有的数据元素仍然属于同一类型。 这里的数组可…

DMR与DPMR以及DMR的分层

数字移动无线电 (DMR) 和数字专用移动无线电 (dPMR) 是数字对讲机中使用的流行通信技术。 与传统模拟无线电相比,这两种技术都提供了改进的音频质量、增强的安全功能和增加的网络容量。 但是,DMR 和 dPMR 无线电之间使用的技术存在重大差异&#xff…

逻辑回归(LR,Logistic Regression)算法 简介

逻辑回归(LR,Logistic Regression)算法 当线性回归的预测结果,由于受到个别极端数值的影响而不准的时候, 可以用逻辑回归来解决. 逻辑回归模型的输出只能在 0 到 1 之间,也就是表达一个事件会发生的概率,…

阿里云赵大川:弹性计算推理解决方案拯救 AIGC 算力危机

云布道师 本篇文章围绕弹性计算推理解决方案 DeepGPU 实例如何支持 Stable Diffusion 文生图推理、Stable Diffusion 推理演示示例等相关话题展开。 赵大川 阿里云弹性计算高级技术专家 GPU 云服务器推理解决方案的提出背景 随着 AIGC 时代的到来,两个重要应用应…

使用@jiaminghi/data-view实现一个数据大屏

<template><div class"content bg"><!-- 全局容器 --><!-- <dv-full-screen-container> --><!-- 第二行 --><div class"module-box" style"align-items: start; margin-top: 10px"><!-- 左 -->…

Bash 脚本学习

文章目录 1、脚本编程基础2. 变量2.1 参数变量的引用2.2 环境变量 3 条件判断语句3.1 if 语句3.1.1 语法3.1.2 案例 3.2 case 语句3.2.1 语法3.2.2 案例 3.3 判断参数说明 4 循环语句4.1 for 循环4.1.1 语法4.1.2 案例 4.2 while循环4.2.1 语法4.2.2 案例4. 3 循环总结 5. 函数…

【网络技术设备安全】BGP 基础与概述-2-中转 AS 中的 IBGP 路由传递

0x01 中转 AS 中的 IBGP 路由传递 参考该图&#xff1a; 上图&#xff0c;我们模拟一个 1.0 的路由通过 AS 65101 来传递 1&#xff1a;通过图可知&#xff0c;A 与 B 之间的 Peer 为 EBGP&#xff0c;B 与 E 之间为 Peer IBGP&#xff0c;E 与 F 之间为 Peer EBGP 邻接 2&a…

Mac查询本机ip地址

Mac系统版本和网络配置不同&#xff0c;可能会有一些细微差别。 一、 使用系统偏好设置 1、点击屏幕左上角的Apple图标&#xff0c;选择“系统偏好设置”。 2、点击“网络”。 3、 在左侧选择当前连接的网络&#xff08;如Wi-Fi或以太网&#xff09;&#xff0c;在右侧界面&a…

CMake项目管理

背景 目前看到很过很多框架&#xff0c;很好奇大家如何从头搭建一个C的库&#xff0c;这里简单介绍一个基本模板. 参考&#xff1a;https://zhuanlan.zhihu.com/p/631257434 目录组织 假如项目名称叫project&#xff0c; 一般可以按照下面的方式组织代码&#xff0c;这里可以…

双向A*算法-python

GitHub - LittleFox99/B_A_star: Bidirectional A Star 其中a&#xff0c;b分别为双向A*搜索的权重 #-*- coding:utf-8 -*- # Time : 2020/11/11 1:21 下午 # Author : LittleFox99 # File : a_star.py # 参考&#xff1a; # https://blog.csdn.net/lustyoung/article/d…

2 Pandas之Series

Pandas数据结构简介 Pandas可以处理以下三种数据&#xff1a; SeriesDataFramePanel 这些数据建立在NumPy上&#xff0c;故可以快速运行。 纬度描述 更好的理解这些数据结构的方式是将高维数据看作是低维数据的容器。例如&#xff0c;DataFrame是Series的容器&#xff0c;P…