您现在的位置是:主页 > news > 网站建设小组五类成员/推广普通话ppt课件

网站建设小组五类成员/推广普通话ppt课件

admin2025/5/7 5:02:04news

简介网站建设小组五类成员,推广普通话ppt课件,镇江网站建设咨询,建英文网站费用一般情况下,Feign和Ribbon我们都是结合使用的。Feign是网络请求客户端,Ribbon用于Eureka的负载均衡。下面我总结了下平时使用Feign和Ribbon的一些常用配置。 连接超时和读取超时设置 这俩参数的配置,网上找了很多帖子,也没说出个…

网站建设小组五类成员,推广普通话ppt课件,镇江网站建设咨询,建英文网站费用一般情况下,Feign和Ribbon我们都是结合使用的。Feign是网络请求客户端,Ribbon用于Eureka的负载均衡。下面我总结了下平时使用Feign和Ribbon的一些常用配置。 连接超时和读取超时设置 这俩参数的配置,网上找了很多帖子,也没说出个…

一般情况下,FeignRibbon我们都是结合使用的。Feign是网络请求客户端,Ribbon用于Eureka的负载均衡。下面我总结了下平时使用FeignRibbon的一些常用配置。

连接超时和读取超时设置

这俩参数的配置,网上找了很多帖子,也没说出个所以然来。笔者去看FeignRibbon的源码时,发现各种参数配置类,入口很深,极其蛋疼恶心。

默认配置

默认配置入口

//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();......}}
}

切换成ApacheHttpClient

新增依赖

<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中配置),写了几天,放弃了,后续知晓了再补充吧。