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

相关推荐
何中应1 小时前
RabbitMQ安装及简单使用
分布式·后端·消息队列
何中应1 小时前
使用Python统计小说语言描写的字数
后端·python
等....6 小时前
MobaXterm操作虚拟机
后端
Coder_Boy_8 小时前
Java高级_资深_架构岗 核心知识点——高并发模块(底层+实践+最佳实践)
java·开发语言·人工智能·spring boot·分布式·微服务·架构
笨蛋不要掉眼泪8 小时前
Sentinel 流控规则详解:三种模式与三种效果实战指南
java·jvm·数据库·后端·sentinel
健康平安的活着8 小时前
AI之Toolcalling的使用案例(langchain4j+springboot)
人工智能·spring boot·后端
PythonFun8 小时前
HAProxy端口转发入门:从“搬砖工”到“智能交通警察”
服务器·后端·网络安全
Ama_tor8 小时前
Flask |零基础进阶(上)
后端·python·flask