posts - 206,  comments - 26,  views - 17万
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

  一、消息转换器


Spring会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。
只不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题:

- 数据体积过大
- 有安全漏洞
- 可读性差

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

  二、实现JSON消息转换器

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

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

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

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

 

步骤二:
我们在publisher服务声明MessageConverter:

    @Bean
    public MessageConverter essageConverter(){
        return new Jackson2JsonMessageConverter();
    }

 

 

步骤三:
我们在consumer服务定义MessageConverter

    @Bean
    public MessageConverter jsonMessageConverter(){
        return new Jackson2JsonMessageConverter();
    }

 


步骤四:

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

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

 


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

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

 


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

运行测试:

发送消息后查看控制台:

数据格式为:content_type:application/json

posted on   努力--坚持  阅读(49)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示