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

SpringBoot配置Rabbit中的MessageConverter对象

SpringAMQP默认使用SimpleMessageConverter组件对消息内容进行转换
在这里插入图片描述

  • SimpleMessageConverter: only supports String, byte[] and Serializable payloads仅仅支持String、Byte[]和Serializable对象
  • Jackson2JsonMessageConverter:was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')

SimpleMessageConverter

在使用默认的消息类型转换组件SimpleMessageConverter的情况下发送一个Serializable Java对象给队列,那么队列中的消息内容如下图所示
在这里插入图片描述可是这并不影响消费端在使用默认的消息类型转换组件SimpleMessageConverter的情况下正确的接受该消息并进行成功的转换。
在这里插入图片描述所以通常情况下,默认的消息类型转换组件SimpleMessageConverter也是够用的。

Jackson2JsonMessageConverter

生产端配置Jackson2JsonMessageConverter
但有些时候,开发中 Java对象往往都是以JSON的数据格式进行传输,此时只需要将默认的SimpleMessageConverter消息转换器替换成Jackson2JsonMessageConverter即可
在这里插入图片描述
在将消息类型转换器替换成Jackson2JsonMessageConverter后,生产者把Java对象以JSON的数据格式成功发送到了指定的队列中,消息内容如下所示
在这里插入图片描述当然消费端消费此消息的话,也需要和生产端保持同样的消息类型转化器。

消费端还是使用默认的SimpleMessageConverter来接受JSON格式的消息体会如何呢?经测试,无论参数类型是Message还是String都是没有问题的,可以正常接受;但如果是一个Java对象来接受那么就会出现如下的异常信息
在这里插入图片描述
可以看出SimpleMessageConverter直接JSON反序列化Java对象是不可行的;此时就必须使用Jackson2JsonMessageConverter实例。

消费端配置Jackson2JsonMessageConverter

生产端可以通过rabbitTemplate.setMessageConverter(messageConverter)API来设置消息类型转换器。但通常情况下消费端只需要借助@RabbitListener就可以完成对队列的监听,一个独立的消费端项目中可能根本就不需要显式的注入或配置rabbitTemplate对象,因此setMessageConverter()这种方式来配置消息类型转换器也就无法使用。

在源代码中寻找自动配置类是如何设置消息类型转换器。
在这里插入图片描述下图所示,messageConverter域决定最终使用哪个消息类型转换器,因此看看在什么时候是如何给该域赋值的?
在这里插入图片描述
下图所示,就是自动配置类配置消息类型转化器的方式在这里插入图片描述
所以,只需要把Jackson2JsonMessageConverter对象放到IOC容器中即可,这样自动配置类就会把默认的SimpleMessageConverter给替换成Jackson2JsonMessageConverter

@Configuration
public class RabbitConfiguration {

    /**
     * 配置消息类型转化器
     * @return
     */
    @Bean
    public Jackson2JsonMessageConverter jsonMessageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

可以看到消息类型转化器已设置成功
在这里插入图片描述消费端借助Jackson2JsonMessageConverter组件成功反序列化Java对象
在这里插入图片描述


http://www.kler.cn/a/382091.html

相关文章:

  • 【spark面试题】RDD和DataFrame以及DataSet有什么异同
  • 链表-单链表
  • [MySQL]DCL语句
  • 【UML】- 用例图(结合银行案例解释其中的奥义)
  • 蓝桥杯专项---一维前缀/差分巩固题目
  • 【5.9】指针算法-双指针解验证回文字符串 Ⅱ
  • PostgreSQL 学习笔记:PostgreSQL 主从复制
  • 【自用】fastapi教程第三节--响应与响应体
  • 智能化在线考试及数据可视化系统
  • C++ 之类和对象
  • 集智书童 | UniMatch V2 推进半监督语义分割极限,以更低训练成本实现更优的语义分割结果-建议收藏!
  • 【网络】数据链路层
  • 基于Qt的独立线程创建与多线程执行实验Demo
  • JAVA读取doc,docx转PDF通过vue展示
  • 基于Multisim拔河比赛游戏+计分电路(含仿真和报告)
  • 华为 HarmonyOS NEXT 原生应用开发:【封装正则API】在原生鸿蒙中使用正则表达式校验登录注册模块(邮箱、密码、手机号)校验
  • 微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
  • WordPress 中最佳的维护服务:入门级用户指南
  • 【机器学习导引】ch4-决策树
  • copyq禁止访问网络(ubuntu cgroup)