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
"cn.itcast.feign.clients") (basePackages =
- 指定FeignClient字节码
1
.class}) (clients = {UserClient