由于 feign 客户端和服务提供者的 controller 代码非常相似 ; 以下分为两种简化方式
分为继承和抽取两种方式
feign 继承方式
① 创建一个 product-api module
接口放在一个公共的 jar 包中 , 供服务提供方和服务消费方使用
注意 : 一定要删除 新创建 modle 的启动类和 properties 配置文件 ; 否则服务注册中心(nacos) 会使用 product-api 的服务 , 导致无法正常使用
② 引入依赖
product-api 引入依赖
java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
父工程中引入依赖
<module> product-api </module>

③ 将 ProductAPI 复制到 模块中

④ 打 jar 包


为了让别的子项目使用公共代码
⑤ 在需要使用公共模块的项目中引入依赖
需要替换掉 systemPath
java
<dependency>
<groupId>com.boop</groupId>
<artifactId>product-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>C:\Users\22374\.m2\repository\com\boop\product-api\0.0.1-SNAPSHOT\product-api-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
如果报错就用
java
<dependency>
<groupId>com.boop</groupId>
<artifactId>product-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
⑥ 微调代码
- 服务提供方(ProductController )继承 ProductInterface

- 服务消费方(ProductAPI) 继承继承 ProductInterface

- 然后处理 关于 models 的报错信息
⑦ 测试
http://127.0.0.1:9096/feign/o2


Feign 抽取方式
① 同样是创建一个 product-api module 并导入依赖
<dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-openfeignartifactId> dependency>
注意 : 一定要删除 新创建 modle 的启动类和 properties 配置文件 ; 否则服务注册中心(nacos) 会使用 product-api 的服务 , 导致无法正常使用
② 复制 ProductAPI 和 ProductInfo 到product-api 并打包(install)
③ 在需要使用共同代码的项目中导入依赖(刚刚打好的包)
并且删除 ProductAPI 和两个 ProductInfo
<dependency> <groupId>org.examplegroupId> <artifactId>product-apiartifactId> <version>1.0-SNAPSHOTversion> dependency>
④ 微调代码
导入并使用我们添加依赖的包
⑤ (bug)无法找到 ProductAPI 的 bean
这与扫描路径有关 , 需要指定扫描路径

解决方法 1
在 EnableFeignClients 添加 basePackages 属性为 api 的路径
@EnableFeignClients(basePackages = {"com.boop.productapi.api"})


解决方法 2
添加 clients 属性为类名.class
@EnableFeignClients(clients = {ProductAPI.class})

⑥ 测试
http://127.0.0.1:9096/feign/o2

服务部署
修改配置为 prod 并打包

由于包含第三方的 jar 包 , 需要服务从本地读取

清理 nacos 数据
启动服务
