从零搭建微服务项目Base(第6章——Feign性能优化以及模块抽取)

前言:

本章对原有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的各种模块使用,还敬请期待。

### 如何在 IntelliJ IDEA 中配置和使用 Swagger #### 添加 Maven 依赖 为了使 Swagger 能够工作,在 `pom.xml` 文件中需加入特定的依赖项。这可以通过编辑项目的构建文件来完成: ```xml <dependencies> <!-- swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</version> </dependency> <!-- swagger ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency> </dependencies> ``` 这些依赖会引入必要的库用于生成 API 文档以及提供交互式的 UI 页面[^4]。 #### 创建 Swagger 配置类 接着创建一个新的 Java 类用来初始化并配置 Swagger 实例。通常命名为类似于 `SwaggerConfig.java` 的名称,并放置于合适的位置,比如 `config` 包内: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .build(); } private ApiInfo apiInfo(){ return new ApiInfoBuilder().title("API文档").description("").termsOfServiceUrl("") .contact(new Contact("", "", "")) .license("").licenseUrl("").version("1.0") .build(); } } ``` 这段代码定义了一个 Spring Bean 来设置 Swagger 的基本信息和其他选项。 #### 启动应用测试 当上述步骤完成后,启动应用程序即可访问默认路径 `/swagger-ui.html` 查看自动生成的 RESTful 接口文档界面。通过浏览器打开该链接可以浏览到所有已暴露出来的 HTTP 请求方法及其参数说明等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值