3-6Feign 客户端组件替换 · SpringCloud微服务实战 · 看云
6. Feign 客户端组件替换
导航
本节代码地址
Feign 中默认使用的是HttpClient 来进行接口调用,我们现在使用OkHttp替换掉HttpClient
6.1 什么是 okhttp ?
okhttp 是由 square 公司开源的一个 http 客户端。是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟
okhttp 的设计初衷就是简单和高效,这也是我们选择它的重要原因之一。它的优势如下:
- 支持 HTTP/2 协议。
- 允许连接到同一个主机地址的所有请求,提高请求效率。
- 共享Socket,减少对服务器的请求次数。
- 通过连接池,减少了请求延迟。
- 缓存响应数据来减少重复的网络请求。
- 减少了对数据流量的消耗。
- 自动处理GZip压缩。
6.2新建项目
新建项目fw-cloud-feign-okhttp用于将HttpClient替换OkHttp,代码里的内容和fw-cloud-feign内容一样,拷贝过来即可。
6.3 maven 配置
将fw-cloud-feign中的pom 文件拷贝过来,并添加一下配置
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>${okhttp.version}</version>
</dependency>
6.4 新建OkHttp的配置
这里就不需要HttpClient的之前的config配置了。下面的配置主要是一个demo性质的,实际项目中可以修改为读取application.yml 或application.properties里面的内容。
@Configuration
@ConditionalOnClass(Feign.class)
@AutoConfigureBefore(FeignAutoConfiguration.class)
public class FeignOkHttpConfig {
@Bean
public okhttp3.OkHttpClient okHttpClient(){
return new okhttp3.OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(120, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool())
.addInterceptor(new OkHttpLogInterceptor())
.build();
}
}
OkHttpLogInterceptor 是为了记录连接的url日志
@Slf4j
public class OkHttpLogInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
log.info("OkHttpUrl : " + chain.request().url());
return chain.proceed(chain.request());
}
}
6.5 重启项目
Postman 输入localhost:8771/feignInfo可以看到和之前的结果一样,但是日志有区别了。
2019-12-28 19:22:06.331 INFO 36500 --- [nio-8771-exec-1] c.y.feign.config.OkHttpLogInterceptor : OkHttpUrl : http://desktop-375c7dm:8764/hello
2019-12-28 19:22:07.226 INFO 36500 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty : Flipping property: fw-register-eureka-client.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2019-12-28 19:22:07.360 INFO 36500 --- [nio-8771-exec-1] c.y.feign.config.OkHttpLogInterceptor : OkHttpUrl : http://desktop-375c7dm:8763/hello
2019-12-28 19:22:07.854 INFO 36500 --- [nio-8771-exec-1] c.y.f.controller.EurekaFeignController : hello:8763
