在这次 升级后,之前的系统内使用实体传输受到了限制,如果使用 默认的序列化方式不会出现 的问题,之所以出现这个问题是因为项目使用 方式进行类的 已经 ,在之前 版本的时候 依赖内的 类在构造函数内配置 ,表示信任项目内的所有 ,在 版本时, 类源码构造函数进行了修改,不再信任全部 而是仅仅信任 、 。
本章目标
基于 使用 自定义 配置信任指定 或者全部 。
简书SpringBoot 企业级核心技术学习专题
构建项目
创建项目添加对应依赖, 配置文件如下所示:
消息队列配置文件
我们需要在 配置文件内添加 相应的配置信息,如下所示:
具体消息队列的连接配置信息需要根据实际情况填写。
队列常量配置
我们之前的文章都是采用的 方式来配置队列相关的 、 、 等相关的信息,使用枚举有个弊端,无法在注解内作为属性的值使用,所以我们之前的 类配置监听的队列时都是字符串的形式,这样后期修改时还要修改多个地方(当然队列信息很少变动),我们本章使用 常量的形式进行配置,如下所示:
示例消息队列JavaConfig配置
本章是为了设置信任 ,所以这里使用消息中心队列来模拟,配置代码如下所示:
上面配置类内添加 、 、 等配置,将 使用 路由键与 交换配置进行绑定。
我们在之前说了只有传递实体类时才会出现信任 问题,下面我们需要创建一个简单的消息传输实体,如下所示:
该实体类仅添加了一个 字段,这样足够模拟我们的场景了,到这里我们的配置已经处理完,下面就是我们的队列的 以及 的相关实体类编写。
消息提供者
为队列 添加 的代码实现,如下所示:
消息消费者
当然我们有了 必然要有对应的 ,消费者代码实现如下所示:
创建测试控制器
我们采用控制器发送 请求的方式进行发送消息,创建名为 的控制器,并添加测试方法,如下代码所示:
测试RabbitMQ默认实体传输
下面我们启动项目,首先先来测试 默认的实体类方式,当然这种默认的方式不会产生信任 的情况。
我们为了证实这一点,来访问(http://localhost:8080/index?content=admin)[http://localhost:8080/index?content=admin],我们传递 的值为 ,访问效果控制台输出内容如下:
可以看到控制台的输出内容,直接完成了消息的消费,是没有任何问题的,下面我们对 添加自定义 的配置,使用 替代默认转换方式。
MessageConverter
我们先来创建一个转换的实现类,只需要继承抽象类 并实现内部的 、 两个方法就可以完成实体类的 与 的转换,代码如下所示:
在该转换类内我们使用了 来作为类的映射,我们可以先来看下该类相关信任 的源码,如下所示:
RabbitMqConfiguration
下面我们需要将该转换设置到 、 内,让 支持自定义的消息转换,如下所示:
重启测试
上面的代码配置我们已经把 改成了 ,重启项目,再次访问http://localhost:8080/index?content=admin路径,看下控制台输出日志内容如下所示:
可以看到控制台已经输出了不信任 实体的错误信息,也表明了仅信任 、 两个 ,下面我们就需要继承 来重写构造函数完成信任指定的 。
重写DefaultClassMapper构造函数
创建一个名为 的类并且继承 ,如下所示:
在上面构造函数内我们设置了信任全部的 ,添加了 类后,需要让 使用该类作为映射,修改 部分代码如下所示:
再次重启测试
我们再次重启项目后,仍然访问http://localhost:8080/index?content=admin路径,查看控制台日志如下所示:
根据日志输出已经证明可以正常的完成消息的消费。
总结
如果使用 默认的转换方式,并不会涉及到本章遇到的信任 问题,如果想自定义消息转换并且使用 作为映射,肯定会出现信任 的问题,所以如果需要自定义转换的小伙伴,记住要设置 。
本章源码已经上传到码云:
SpringBoot配套源码地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源码地址:https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相关系列文章请访问:目录:SpringBoot学习目录
QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录
SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录
感谢阅读!
领取专属 10元无门槛券
私享最新 技术干货