SpringAMQP消息转化器

说明:使用SpringAMQP中的RabbitMQ,发送的消息如果是对象的话,会被Spring序列化进行传输,序列化后的java对象,内容会变得很长,导致本来只有十几个字节的对象数据变成几百字节。这个问题可以通过自定义的消息转化器替换掉Spring默认的消息转换器,使消息以json数据的形式传输,不进行序列化。

默认的消息转化器

测试一下默认的消息转化器,看下效果

java 复制代码
    @Test
    public void sendMapMsg() {
        // 准备对象数据
        Map<String,Object> msgMap = new HashMap<>();
        msgMap.put("name", "zhangsan");
        msgMap.put("age", 25);

        // 发送消息
        rabbitTemplate.convertAndSend("msgMap.queue", msgMap);
    }

打开RabbitMQ管理平台,可以看到就这两行信息,被序列化后足有183byte;

自定义消息转化器

使用自定义消息转化器,需要导入下面的依赖

xml 复制代码
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.10</version>
</dependency>

将自定义的JSON消息转化器,手动添加到IOC容器中

java 复制代码
@Bean
public MessageConverter jsonMessageConverter(){
    return new Jackson2JsonMessageConverter();
}

添加完成后,再次发送消息,查看RabbitMQ管理平台的消息,可以看到json格式的消息要小得多

同样,接收方需要对消息的转换需要和发送方一致,如果发送方将消息转为成了json,接收方想正常接收,也需要使用自定义的JSON消息转化器

java 复制代码
    @RabbitListener(queues = "msgMap.queue")
    public void listenMapQueueMessage(Map<String,Object> map){
        System.out.println("map = " + map);
    }

不然会报消息转换异常

vbnet 复制代码
Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [[B] to [java.util.Map] for GenericMessage [payload=byte[28], 

首次发布

hezhongying.blog.csdn.net/article/det...

相关推荐
程序员Better4 分钟前
前端成功转型AI全栈,我踩过的坑都替你填上了
前端·后端·ai编程
兔子零10247 分钟前
GPT-5.5 与 DeepSeek-V4:大模型竞争的本质,正在从“谁更强”变成“谁让成本更低”
前端·javascript·后端
juniperhan1 小时前
Flink 系列第17篇:Flink Table&SQL 核心概念、原理与实战详解
大数据·数据仓库·分布式·sql·flink
楼田莉子2 小时前
CMake学习:CMake语法
c++·后端·学习·软件构建
无限进步_2 小时前
C++ 继承机制完全解析:从基础原理到菱形继承问题
java·开发语言·数据结构·c++·vscode·后端·算法
武子康2 小时前
大数据-278 Spark MLib-GBDT梯度提升决策树详解:从原理到实战案例
大数据·后端·spark
SamDeepThinking2 小时前
适合中小型企业的出口入口网关微服务
java·后端·架构
笨蛋不要掉眼泪2 小时前
面试篇-java基础上
java·后端·面试·职场和发展
lwx572803 小时前
MySQL 性能调优完全指南:从硬件到 SQL,一篇吃透
后端