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

相关推荐
苍何6 小时前
开源微信流 Windows,微信聊天记录,可以直接给 Codex 和 Obsidan 了
后端
代码什么用7 小时前
Spring基础使用
java·后端·spring
明月_清风8 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
蜗牛互联网8 小时前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端
用户693717500138410 小时前
2026,程序员的时代拐点到了
android·前端·后端
惜鸟10 小时前
从源码看 pi 的上下文管理:原始数据永久保留,模型视角按需裁剪
后端
量化分析码农11 小时前
【Python量化策略评估体系 #05】极端行情扛得住吗?2008/2015/2020 三场景压力测试
后端
十年Java程序媛11 小时前
Java 接口和抽象类对比|Java8 新特性,抛弃老旧八股,正确选型
java·spring boot·后端
IT_陈寒11 小时前
SpringBoot自动配置差点让我加班到凌晨
前端·人工智能·后端
用户83562907805111 小时前
使用 Python 对 Excel 工作表进行排序
后端·python