SpringBoot2.0新特性-RabbitMQ信任package设置

在这次 升级后,之前的系统内使用实体传输受到了限制,如果使用 默认的序列化方式不会出现 的问题,之所以出现这个问题是因为项目使用 方式进行类的 已经 ,在之前 版本的时候 依赖内的 类在构造函数内配置 ,表示信任项目内的所有 ,在 版本时, 类源码构造函数进行了修改,不再信任全部 而是仅仅信任 、 。

本章目标

基于 使用 自定义 配置信任指定 或者全部 。

简书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学习目录

感谢阅读!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180626G08AQ400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券