当前位置: 首页 > article >正文

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服务的父工程引入依赖:

        <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> msg = new HashMap<>();
        map.put("name","张三");
        map.put("age",21);
        // 发送消息
        rabbitTemplate.convertAndSend( "object.queue", msg);
    }

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

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

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

完成测试:

发送消息后查看控制台:

数据格式为:content_type:application/json


http://www.kler.cn/news/355475.html

相关文章:

  • jmeter中对于有中文内容的csv文件怎么保存
  • C语言复习第4章 数组
  • webm格式怎么转换成mp4?几个操作简单的视频格式转换方法
  • 华为OD机试真题---勾股数元组
  • css 如何根据子元素给他的父元素设置样式
  • 【Vue】Vue3.0(十一)Vue 3.0 中 computed 计算属性概念、使用及示例
  • 还在滥用模糊查找?这类场景下 MySQL 多值索引性能更加强悍!
  • Leetcode|209.长度最小的子数组 And 59.螺旋矩阵||
  • 【C++】哈希表的封装——同时实现unordered_map和unordered_set
  • 【Vue】Vue3.0 (十二)、watchEffect 和watch的区别及使用
  • 【电商项目】1分布式基础篇
  • ASPICE在国内应用的挑战与改进空间
  • 奥比中光opencv显示可见光图片
  • [论文笔记] llama-factory 微调qwen2.5、llama3踩坑
  • php strtr 函数的坑
  • Android二代抽取壳简易实现和踩坑记录
  • <Linux> 线程池
  • vue项目中使用websocket
  • MAC地址漂移实验
  • 【ShuQiHere】智慧城市(Smart City)全面指南:AI如何重塑城市生活 ️