open Feign服务抽取
open Feign虽然简化了远程调用,但是仍然存在着一些不太好的问题,这种问题并不是代码程序的问题,而是代码无法服用,无法构成一种编程的思维模式,如果一个服务需要多次被其他服务所引用并且服务数量很多的时候,代码程度就会很复杂,并且需要大量的重复编写同一个代码,这个时候就需要利用到maven的特性了,将服务提供统一封装到一个服务之中,然后再导入到其他需要的服务,这样就能实现代码的复用。
一般来说服务抽取有两种常用方式 :
1. 由微服务的开发商在编写的过程中就创建好两个子模块,分别暴露client接口和相关的类,这种方式也被称为防守型抽取
2.将所有的服务全部抽取到一个新的公共模块,在使用的时候就把这个模块导入进去,这种方式比第一张耦合度高一点
在这里实现一下第二种抽取方式,将client抽取到一个公共模块
在导入依赖方面只需要导入open Feign和loadbalancer依赖即可,如果有其他需求再导入就行了,比如swagger
1.创建一个公共的模块,可以不需要启动类,这个项目主要用于引入到maven,不会启动
2. 导入pom.xml依赖<dependencies> <!--open feign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- load balancer--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <!-- swagger 注解依赖 --> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.6.6</version> <scope>compile</scope> </dependency> </dependencies>
3.创建client包和DTO包,之所以要DTO是因为client需要
4. 将模块导入到其他需要调用的服务之中
<!-- api --> <dependency> <groupId>com.heima</groupId> <artifactId>hm-api</artifactId> <version>1.0.0</version> </dependency>
这样子启动会出问题,springboot无法扫描到client的包,无法创建bean是,使用需要手动扫描client的包,有两种方式
方式一:
方式二:
如果报错找不到依赖和文件,切记看一下api模块是不是缺少了build插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>repackage</id> <phase>none</phase> <!-- 或者 <goals><goal>repackage</goal></goals> --> <configuration> <skip>true</skip> </configuration> </execution> </executions> </plugin> </plugins> </build>