Spring Cloud Feign 使用OkHttp或HttpClient覆盖默认客户端

前言

我们知道,流行的开源Http库的性能均远高于JDK源生的HttpURLConnection,因此实际生产中肯定是用的三方库来发送Http请求。

Feign它提供了feign.Client抽象来发送Http请求,因此使得它拥有良好的扩展性,而恰好Feign的子模块里亦提供了对OkHttp以及Apache HttpClient的整合,本文将教你如何把Feign切换为第三方HC以提高性能。

Feign的模块中有三个关于HC的子模块:feign-okhttp、feign-httpclient、feign-googlehttpclient。

这边以OkHttp为例。

GAV如下

“携带”的okhttp版本号是:3.6.0。(若把Feign调整到最新版本10.7.4,那么它携带的okhttp版本号也就是最新的3.14.6的了)

说明:okhttp虽然目前最新版本是4.x版本的,关于区别你可以简单粗暴的理解:前者是用kotlin改写了,后者还是用Java写的,其它的并无什么变化。
所以,在Server端使用okhttp,请务必使用3.x版本~移动端可酌情使用4.x版本

我们知道Feign最终是通过它的feign.Client这个API去发送远程请求的,而feign.Client是可以在构建的时候由使用者自定义指定的。有了以上理论的支撑,若想切换最终发送Http请求的HC,仅需在构建时使用自己的feign.Client即可。

使用示例

构建Feign时,指定使用OkHttpClient:

当然,如果你已经有现成的定制好的okhttpClient里,直接使用即可,形如这样:

源码解析

feign-okhttp这个jar包内,有且仅有一个类:feign.okhttp.OkHttpClient,它是对feign.Client接口的实现。

这个逻辑不难,其实就一普通的Http请求的发送,不同之处在于进行了两次数据转换:

  • Request之前的转换
  • Response之间的转换

其中,需要特别特别注意的是:请务必确保每次请求都是线程安全的。feign.Client接口的Javadoc也特别强调了这一点~

总结

Apache HttpClient 和 GoogleHttpClient 的实现也是一样,这边就不详述了。

0

《Spring Cloud Feign 使用OkHttp或HttpClient覆盖默认客户端》有一个想法

发表评论

邮箱地址不会被公开。