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

相关推荐
星辰徐哥5 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥5 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约5 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee5 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐5 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs5 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐5 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司5 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
码农阿豪5 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
追逐时光者5 小时前
一个基于 .NET 与 Avalonia 构建、面向 TrinityCore 的开源 WoW 数据库编辑器
后端·.net