Feign底层客户端实现
- URLConnection:默认实现,不支持连接池
 - Apache HttpClient:支持连接池
 - OKHttp:支持连接池
 
优化Feign的性能主要包括
- 使用连接池代替默认的URLConnection
 - 日志级别,最好用basic或者none
 
Feign添加HttpClient支持
- 引入依赖
 
1  | <!--引入HttpClient依赖-->  | 
- 配置连接池
 
1  | feign:  | 
Feign的最佳实践
- 方式一(继承):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准
- 客户端和服务端共享接口,紧耦合
 - 对Spring MVC 无效
 
 - 方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到该模块中,提供给消费者调用
- 消费者需要方法不同,单独对于一个消费者来说,有的方法较为多余
 
 
抽取FeignClient
- 首先创建一个module,命名为feign-api,然后引入feign的starter依赖
 - 将order-service中编写的UserClient,User,DefaultFeignConfiguration都复制到项目中
 - 在order-service中引入feign-api的依赖
 - 修改order-service中与上述三个组件有关的import部分,改成导入feign-api中的包
 - 重启测试
 当定义的Client不在Spring扫描范围时,Client无法使用。两种方案:
- 指定FeignClient所在包
 
1
(basePackages = "cn.itcast.feign.clients")
- 指定FeignClient字节码
 
1
(clients = {UserClient.class})