RabbitMQ 入门(八)SpringAMQP消息转换器

一、消息转换器

Spring会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。

只不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题:

  • 数据体积过大

  • 有安全漏洞

  • 可读性差

JDK序列化方式并不合适。我们希望消息体的体积更小、可读性更高,因此可以使用JSON方式来做序列化和反序列化。

二、实现JSON消息转换器

spring 的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的.而默认实现是SimpleMeaasgeConverter,基于JDK的ObjectOutputStream完成序列化。

如果要修改只需要定义一个MessageConverter类型的Bean即可.推荐使用JSON方式序列化,步骤如下:

步骤一:

我们在publisher服务和consumer服务的父工程引入依赖:

XML 复制代码
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

步骤二:

我们在publisher服务声明MessageConverter:

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

步骤三:

我们在consumer服务定义MessageConverter

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

步骤四:

定义生产者,向object.queue队列发送消息

java 复制代码
    @Test
    public void testSendObjectQueue() {
   
        Map<String, Object> msg = new HashMap<>();
        map.put("name","张三");
        map.put("age",21);
        // 发送消息
        rabbitTemplate.convertAndSend( "object.queue", msg);
    }

步骤五:

然后定义一个消费者,监听object.queue队列并消费信息:

java 复制代码
    @RabbitListener(queues = "object.queue")
    public void listenObjectQueue(Map<String,Object> msg){
        System.out.println("接收到object.queue的消息:" + msg);
    }

注意:发送方与接收方必须使用相同的MessageConverter。

完成测试:

发送消息后查看控制台:

数据格式为:content_type:application/json

相关推荐
CV_J17 小时前
RabbitMQ安装
rabbitmq
独自破碎E20 小时前
RabbitMQ怎么实现延迟消息?
rabbitmq
小北方城市网21 小时前
SpringBoot 集成 RabbitMQ 实战(消息队列解耦与削峰):实现高可靠异步通信
java·spring boot·python·微服务·rabbitmq·java-rabbitmq·数据库架构
装不满的克莱因瓶21 小时前
【2026最新 架构环境安装篇三】Docker安装RabbitMQ4.x详细教程
linux·运维·docker·容器·架构·rabbitmq
Chan161 天前
【 Java八股文面试 | RabbitMQ篇 】
java·spring boot·spring·面试·java-ee·rabbitmq·java-rabbitmq
小北方城市网1 天前
SpringBoot 集成 Redis 实战(缓存优化与分布式锁):打造高可用缓存体系与并发控制
java·spring boot·redis·python·缓存·rabbitmq·java-rabbitmq
jonyleek2 天前
告别硬编码:通过逻辑编排引擎的RabbitMQ监听实现灵活自动化
分布式·自动化·rabbitmq·服务编排·逻辑引擎
利刃大大2 天前
【RabbitMQ】延迟队列 && 事务 && 消息分发
分布式·消息队列·rabbitmq·队列
八宝粥大朋友2 天前
rabbitMQ-C 构建android 动态库
android·c语言·rabbitmq
小北方城市网2 天前
SpringBoot 集成消息队列实战(RabbitMQ/Kafka):异步通信与解耦,落地高可靠消息传递
java·spring boot·后端·python·kafka·rabbitmq·java-rabbitmq