OpenFeign 最佳实践
问题引入
最佳实践是在项目实践中总结出的使用方式。
通过观察,我们也能看出来,Feign 的客户端与服务提供者的 Controller 代码非常相似:
Feign 客户端
@FeignClient(value = "product-service", path = "/product")
public interface ProductApi {
@RequestMapping("/{productId}")
ProductInfo getProductById(@PathVariable("productId") Integer productId);
}
服务提供方 Controller
@RequestMapping("/product")
@RestController
public class ProductController {
@Autowired
private ProductService productService;
@RequestMapping("/{productId}")
public ProductInfo getProductById(@PathVariable("productId") Integer productId) {
return productService.selectProductById(productId);
}
}
那么有没有一种方法可以简化这种写法呢?
Feign 继承方式
Feign 支持继承的方式,我们可以把一些常见的操作封装到接口里。我们可以定义好一个接口,服务提供方实现这个接口,服务消费方编写 Feign 接口的时候,直接继承这个接口。
创建 Module
接口可以放在一个公共的 Jar 包里,供服务提供方和服务消费方使用。
引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
org.springframework.cloud
spring-cloud-starter-openfeign

