作者:微信小助手
发布时间:2021-09-24T13:41:48
OpenFeign 是 SpringCloud 中的重要组件,它是一种声明式的 HTTP 客户端。使用OpenFeign 调用远程服务就像调用本地方法一样,但是如果使用不当,很容易踩到坑。 如果不做特殊配置,OpenFeign 默认使用 JDK 自带的 HttpURLConnection。 我们知道,HttpURLConnection 没有连接池、性能和效率比较低,如果采用默认,很可能会遇到性能问题导致系统故障。 可以采用 Apache HttpClient,properties 文件中增加下面配置: pom 文件中增加依赖:
也可以采用 OkHttpClient,properties 文件中增加下面配置: pom文件中增加依赖: 通过 OpenFeign 作为注册中心的客户端时,默认使用 Ribbon 做负载均衡,Ribbon 默认也是用 JDK 自带的 HttpURLConnection。需要给 Ribbon 也设置一个 Http client,比如使用 okhttp,在 properties 文件中增加下面配置: OpenFeign 可以设置超时时间,简单粗暴。 设置一个全局的超时时间,如下: 如果不配置超时时间,默认是连接超时 10s,读超时 60s。在源码 feign.Request 的内部类 Options 中定义。 这个接口设置了最大的 readTimeout 是 60s。这个时间必须大于调用的所有外部接口的 readTimeout,否则处理时间大于 readTimeout 的接口就会调用失败。 如下图,在一个系统中使用 OpenFeign 调用外部三个服务,每个服务提供两个接口。其中,serviceC 的一个接口需要 60s 才能返回,那上面的 readTimeout 必须设置成60s。坑一、用对 Http Client
1.1 feign 中 http client
feign.httpclient.enabled=true
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>9.3.1</version>
</dependency>
feign.okhttp.enabled=true
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>10.2.0</version>
</dependency>
1.2 ribbon 中的 Http Client
ribbon.okhttp.enabled=true
坑二、全局超时时间
feign.client.config.default.connectTimeout=2000
feign.client.config.default.readTimeout=60000