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...

相关推荐
伟大的大威4 小时前
NVIDIA DGX Spark (Blackwell GB10) 双机 196B Step 3.5 Flash 大模型部署完整实录
分布式·spark·nvidia
凤山老林4 小时前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
清汤饺子4 小时前
用 Cursor 半年了,效率还是没提升?是因为你没用对这 7 个功能
前端·后端·cursor
雨夜之寂4 小时前
Browser Use + DeepSeek,我踩了哪些坑
后端·面试
wefly20174 小时前
开发者效率神器!jsontop.cn一站式工具集,覆盖开发全流程高频需求
前端·后端·python·django·flask·前端开发工具·后端开发工具
dreamread5 小时前
【SpringBoot整合系列】SpringBoot3.x整合Swagger
java·spring boot·后端
把你毕设抢过来5 小时前
基于Spring Boot的社区智慧养老监护管理平台(源码+文档)
数据库·spring boot·后端
一直都在5725 小时前
Spring面经
java·后端·spring
XPoet6 小时前
AI 编程工程化:Command——给你的 AI 员工编一套操作手册
前端·后端·ai编程
jgyzl6 小时前
2026.3.12 常见的缓存读写策略
java·后端·spring