SpringCloud系列——Feign+Ribbon配置实战篇

一般情况下,FeignRibbon我们都是结合使用的。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.文件配置

全局配置:

ribbon.ConnectTimeout=1000
ribbon.ReadTimeout=3000

单个配置:

feignClientName.ribbon.ConnectTimeout=1000
feignClientName.ribbon.ReadTimeout=3000

2.代码注解配置

新增配置类:

@Configuration
public class CustomConfiguration {
    @Bean
    public 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();
}

其中,代码注解配置比文件配置方式优先级更高。

3.重试次数设置

Feign默认是不会进行重试的!

//FeignClientsConfiguration.java
@Bean
@ConditionalOnMissingBean
public Retryer feignRetryer() {
	return Retryer.NEVER_RETRY;
}

 自定义重试策略

@Bean
public Retryer feignRetryer() {
    return new Retryer.Default(period, maxPeriod, maxAttempts);
}

同时Feign的HTTP客户端支持三种框架:

        HttpURLConnection、HttpClient、OkHttp;Feign使用的默认客户端是HttpURLConnection,且没有SSL认证:

4.切换网络请求客户端

//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

新增依赖:这里的版本号,要跟io.github.openfeign:feign-core的版本,保持一致。

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
    <version>10.1.0</version>
</dependency>
新增配置:
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;
}

切换成OkHttp

新增依赖:这里的版本号,要跟io.github.openfeign:feign-core的版本,保持一致。

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
    <version>10.1.0</version>
</dependency>

新增配置:

feign.httpclient.enabled=false
feign.okhttp.enabled=true

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值