前言:
本章对原有Feign进行了性能优化,并将order-service和user-service的pojo和constant包抽取到common模块下,并同理抽取了Feign-ApI模块,使模块间更加独立。
本章代码基于第5章项目,前置源码可在第5章博客下载,博客链接如下:
从零搭建微服务项目(第5章——SpringBoot项目LogBack日志配置+Feign使用)-优快云博客https://blog.youkuaiyun.com/wlf2030/article/details/145573585简要介绍前置项目流程:order-service以及user-service两服务分别连接order-db以及user-db两数据库,order-db中仅有user-id,user-info存在user-db中,为提供完整order-info,order-service通过nacos发现user-service服务地址并使用Feign调用服务端口拿取user-info结合从order-db中拿取的信息返回给前端。同时项目自定义日志输出。
本项目源码链接如下:
wlf728050719/SpringCloudBase6https://github.com/wlf728050719/SpringCloudBase6
以及本专栏会持续更新微服务项目,每一章的项目都会基于前一章项目进行功能的完善,欢迎小伙伴们关注!同时如果只是对单章感兴趣也不用从头看,只需下载前一章项目即可,每一章都会有前置项目准备部分,跟着操作就能实现上一章的最终效果,当然如果是一直跟着做可以直接跳过这一部分。专栏目录链接如下,其中Base篇为基础微服务搭建,Pro篇为复杂模块实现。
从零搭建微服务项目(全)-优快云博客https://blog.youkuaiyun.com/wlf2030/article/details/145799620
一、前置项目准备
1.从github下载前一章的项目解压,重命名为Base6打开。
2.重命名模块为Base6.
3.父工程pom.xml中<name>改成Base6。
4.选择环境为dev,并重新加载maven
5.启动nacos(安装和启动见第三章)
6.进入nacos网页 配置管理->配置列表确认有这些yaml文件。
(如果不是一直跟着专栏做自然是没有的,需要看第四章的环境隔离和配置拉取,记得把父工程pom文件中namespace的值与nacos中命名空间生成的保持一致)
7.配置数据源,更换两服务的resources下yml文件的数据库配置,数据库sql见第一章数据库准备部分。
.测试数据库连接 属性->点击数据源->测试连接->输入用户名密码
8.添加运行配置 服务->加号->运行配置类型->spring boot
启动服务,测试接口
能够在日志文件中看到最新的日志记录。
二、Feign性能优化
1.order-service的pom添加依赖
2.order-service的application.yml添加配置
三、抽取Feign-API模块以及Common模块
右键项目创建新的maven模块,选择quickstart。
删除自动生成的java文件,并创建feign包
feign-api模块的pom中引入feign依赖
同理创建common模块管理pojo
将user-service和order-service的bean目录下所有文件复制粘贴过去,(现在才发现之前命名为bean的问题,应该使用pojo),并把之前的bean目录删除掉,粘贴显示有相同命名文件选择全部覆盖即可,因为类的内容本来就是一样的。
再把order-service或user-service的constant部分粘贴到common模块下。
更改pojo的import部分,此处不再赘述,如果还有不会可以直接看本章最终源码。
api模块调整好没有红字后,在order-service和user-service的pom文件中引入common模块。
按照mapper->mapper对应xml->service->controller->client的顺序修改import(不强制,只是这样会方便很多)
启动服务,测试接口是否正确执行。
服务能正常启用,但调用接口时发现无法获取用户信息,查看控制台报错显示UserBaseInfoDTO缺少无参构造函数。
查看内容发现由于是先粘贴的order-service部分后用user-service进行覆盖,而原有order-service中由于没有构造函数默认是有无参构造方法的,而user-service不需要由反序列化直接由UserPO掩码得到,所以也不需要无参构造。解决方法为添加无参构造函数。
重启后能够成功调用。
接下来配置feign-api模块。
将order-service中client和config包剪切到feign-api即可。
在feign-api模块的pom中导入common依赖。
order-service导入feign-api依赖。
并修改orderapplication的import。
启动后发现报错,即无法自动装配userClient。
原因为userClient在另外一个模块,springboot默认只扫描当前所在模块,解决方法
添加clients配置指定client。
再次启动后成功。
同时能够发现日志没有输出Feign的调用,原因为上一章中所讲,不是从这个包输出的日志信息被单独配置了,而是这个包定义的日志语句被单独配置。感兴趣可参考上一章第三节。
最后:
至此关于微服务项目服务间调用就暂时告一段落,接下来将学习SpringCloud的各种模块使用,还敬请期待。