您现在的位置是:主页 > news > 网站建设小组五类成员/推广普通话ppt课件
网站建设小组五类成员/推广普通话ppt课件
admin2025/5/7 5:02:04【news】
简介网站建设小组五类成员,推广普通话ppt课件,镇江网站建设咨询,建英文网站费用一般情况下,Feign和Ribbon我们都是结合使用的。Feign是网络请求客户端,Ribbon用于Eureka的负载均衡。下面我总结了下平时使用Feign和Ribbon的一些常用配置。 连接超时和读取超时设置 这俩参数的配置,网上找了很多帖子,也没说出个…
一般情况下,Feign
和Ribbon
我们都是结合使用的。Feign
是网络请求客户端,Ribbon
用于Eureka
的负载均衡。下面我总结了下平时使用Feign
和Ribbon
的一些常用配置。
连接超时和读取超时设置
这俩参数的配置,网上找了很多帖子,也没说出个所以然来。笔者去看Feign
和Ribbon
的源码时,发现各种参数配置类,入口很深,极其蛋疼恶心。
默认配置
默认配置入口
//RibbonClientConfiguration.java
@Bean
@ConditionalOnMissingBean
public IClientConfig ribbonClientConfig() {DefaultClientConfigImpl config = new DefaultClientConfigImpl();config.set(CommonClientConfigKey.ConnectTimeout, 1000);config.set(CommonClientConfigKey.ReadTimeout, 1000);return config;
}
坑点1
Feign
客户端网络请求连接和读取超时,Feign
的属性配置类FeignRibbonClientAutoConfiguration
中的配置BeanfeignRequestOptions()
默认会被覆盖,居然是去读ribbon
的配置,惊不惊喜,意不意外?
坑点2
而且,ribbon
配置类DefaultClientConfigImpl
中默认连接和读取时间分别是2s和5s,这里却突然更改了值,我也是找了半天才找到。。。
更改配置方式
文件配置
全局配置
ribbon.ConnectTimeout=1000
ribbon.ReadTimeout=3000
单个配置
feignClientName.ribbon.ConnectTimeout=1000
feignClientName.ribbon.ReadTimeout=3000
代码注解配置
新增配置类:
@Configuration
public class CustomConfiguration {@Beanpublic Request.Options feignRequestOptions() {return new Request.Options(connectTimeoutMillis, readTimeoutMillis);}
}
在被FeignClient
注解的类中添加配置:
@FeignClient(name = "user-api", configuration = CustomConfiguration.class)
public interface TestFeign {@GetMapping(value = "/getName")@ApiOperation(value = "测试数据", httpMethod = "GET")String getName();
}
其中,代码注解配置比文件配置方式优先级更高。
重试次数设置
默认配置
Feign
默认是不会进行重试的!
//FeignClientsConfiguration.java
@Bean
@ConditionalOnMissingBean
public Retryer feignRetryer() {return Retryer.NEVER_RETRY;
}
自定义重试策略
@Bean
public Retryer feignRetryer() {return new Retryer.Default(period, maxPeriod, maxAttempts);
}
切换网络请求客户端
默认客户端
Feign
使用的默认客户端是HttpURLConnection
,且没有SSL
认证:
//feign.Client.java
public interface Client{public static class Default implements Client {HttpURLConnection convertAndSend(Request request, Options options) throws IOException {final HttpURLConnection connection =(HttpURLConnection) new URL(request.url()).openConnection();......}}
}
切换成Apache
的HttpClient
新增依赖
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId><version>10.1.0</version>
</dependency>
这里的版本号,要跟io.github.openfeign:feign-core
的版本,保持一致。
新增配置
feign.compression.response.enabled=true
这里设置为true之后,spring容器就会去加载自定义的httpClient
:
//HttpClientFeignLoadBalancedConfiguration.java
//若为true,就会来加载这里
@Bean
@ConditionalOnProperty(value = "feign.compression.response.enabled", havingValue = "true")
public CloseableHttpClient customHttpClient(HttpClientConnectionManager httpClientConnectionManager,FeignHttpClientProperties httpClientProperties) {HttpClientBuilder builder = HttpClientBuilder.create().disableCookieManagement().useSystemProperties();this.httpClient = createClient(builder, httpClientConnectionManager, httpClientProperties);return this.httpClient;
}
//若为false,加载默认的HttpURLConnection
@Bean
@ConditionalOnProperty(value = "feign.compression.response.enabled", havingValue = "false", matchIfMissing = true)
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory, HttpClientConnectionManager httpClientConnectionManager,FeignHttpClientProperties httpClientProperties) {this.httpClient = createClient(httpClientFactory.createBuilder(), httpClientConnectionManager, httpClientProperties);return this.httpClient;
}
这里我有尝试过重写HttpClientBuilder
,设置连接超时和响应超时时间,但是我测试验证后,发现参数并没有生效,实际网络请求时,还是读取的之前的参数。
切换成OkHttp
新增依赖
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-okhttp</artifactId><version>10.1.0</version>
</dependency>
这里的版本号,要跟io.github.openfeign:feign-core
的版本,保持一致。
新增配置
feign.httpclient.enabled=false
feign.okhttp.enabled=true
结语
写这篇文章写到奔溃,我想自定义OkHttp
或者HttpClient
的参数,奈何怎么设置读取超时参数,自测都不行(只能在FeignClient
中配置),写了几天,放弃了,后续知晓了再补充吧。