|
|
@ -100,8 +100,8 @@ public class FeignRibbonClientAutoConfiguration { |
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
@ConditionalOnClass(ApacheHttpClient.class) |
|
|
|
@ConditionalOnClass(ApacheHttpClient.class) |
|
|
|
@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true) |
|
|
|
@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true) |
|
|
|
protected static class HttpClientFeignLoadBalancedConfiguration { |
|
|
|
@ConditionalOnMissingBean(CloseableHttpClient.class) |
|
|
|
|
|
|
|
protected static class HttpClientFeignConfiguration { |
|
|
|
private final Timer connectionManagerTimer = new Timer( |
|
|
|
private final Timer connectionManagerTimer = new Timer( |
|
|
|
"FeignApacheHttpClientConfiguration.connectionManagerTimer", true); |
|
|
|
"FeignApacheHttpClientConfiguration.connectionManagerTimer", true); |
|
|
|
|
|
|
|
|
|
|
@ -130,27 +130,19 @@ public class FeignRibbonClientAutoConfiguration { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
@Bean |
|
|
|
@ConditionalOnMissingBean(CloseableHttpClient.class) |
|
|
|
|
|
|
|
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory, |
|
|
|
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory, |
|
|
|
HttpClientConnectionManager httpClientConnectionManager, |
|
|
|
HttpClientConnectionManager httpClientConnectionManager, |
|
|
|
FeignHttpClientProperties httpClientProperties) { |
|
|
|
FeignHttpClientProperties httpClientProperties) { |
|
|
|
RequestConfig defaultRequestConfig = RequestConfig.custom() |
|
|
|
RequestConfig defaultRequestConfig = RequestConfig.custom() |
|
|
|
.setConnectTimeout(httpClientProperties.getConnectionTimeout()) |
|
|
|
.setConnectTimeout(httpClientProperties.getConnectionTimeout()) |
|
|
|
.setRedirectsEnabled(httpClientProperties.isFollowRedirects()) |
|
|
|
.setRedirectsEnabled(httpClientProperties.isFollowRedirects()) |
|
|
|
.build(); |
|
|
|
.build(); |
|
|
|
this.httpClient = httpClientFactory.createClient(defaultRequestConfig, |
|
|
|
this.httpClient = httpClientFactory.createBuilder(). |
|
|
|
httpClientConnectionManager); |
|
|
|
setDefaultRequestConfig(defaultRequestConfig). |
|
|
|
|
|
|
|
setConnectionManager(httpClientConnectionManager).build(); |
|
|
|
return this.httpClient; |
|
|
|
return this.httpClient; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
|
|
|
@ConditionalOnMissingBean(Client.class) |
|
|
|
|
|
|
|
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory, |
|
|
|
|
|
|
|
SpringClientFactory clientFactory, HttpClient httpClient) { |
|
|
|
|
|
|
|
ApacheHttpClient delegate = new ApacheHttpClient(httpClient); |
|
|
|
|
|
|
|
return new LoadBalancerFeignClient(delegate, cachingFactory, clientFactory); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@PreDestroy |
|
|
|
@PreDestroy |
|
|
|
public void destroy() throws Exception { |
|
|
|
public void destroy() throws Exception { |
|
|
|
connectionManagerTimer.cancel(); |
|
|
|
connectionManagerTimer.cancel(); |
|
|
@ -160,11 +152,26 @@ public class FeignRibbonClientAutoConfiguration { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
|
|
|
@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true) |
|
|
|
|
|
|
|
@ConditionalOnClass(ApacheHttpClient.class) |
|
|
|
|
|
|
|
protected static class HttpClientFeignLoadBalancedConfiguration { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
|
|
|
@ConditionalOnMissingBean(Client.class) |
|
|
|
|
|
|
|
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory, |
|
|
|
|
|
|
|
SpringClientFactory clientFactory, HttpClient httpClient) { |
|
|
|
|
|
|
|
ApacheHttpClient delegate = new ApacheHttpClient(httpClient); |
|
|
|
|
|
|
|
return new LoadBalancerFeignClient(delegate, cachingFactory, clientFactory); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
|
|
|
|
@ConditionalOnMissingBean(okhttp3.OkHttpClient.class) |
|
|
|
@ConditionalOnClass(OkHttpClient.class) |
|
|
|
@ConditionalOnClass(OkHttpClient.class) |
|
|
|
@ConditionalOnProperty(value = "feign.okhttp.enabled") |
|
|
|
@ConditionalOnProperty(value = "feign.okhttp.enabled") |
|
|
|
protected static class OkHttpFeignLoadBalancedConfiguration { |
|
|
|
protected static class OkHttpFeignConfiguration { |
|
|
|
|
|
|
|
|
|
|
|
private okhttp3.OkHttpClient okHttpClient; |
|
|
|
private okhttp3.OkHttpClient okHttpClient; |
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
@Bean |
|
|
@ -178,15 +185,14 @@ public class FeignRibbonClientAutoConfiguration { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
@Bean |
|
|
|
@ConditionalOnMissingBean(okhttp3.OkHttpClient.class) |
|
|
|
|
|
|
|
public okhttp3.OkHttpClient client(OkHttpClientFactory httpClientFactory, |
|
|
|
public okhttp3.OkHttpClient client(OkHttpClientFactory httpClientFactory, |
|
|
|
ConnectionPool connectionPool, FeignHttpClientProperties httpClientProperties) { |
|
|
|
ConnectionPool connectionPool, FeignHttpClientProperties httpClientProperties) { |
|
|
|
Boolean followRedirects = httpClientProperties.isFollowRedirects(); |
|
|
|
Boolean followRedirects = httpClientProperties.isFollowRedirects(); |
|
|
|
Integer connectTimeout = httpClientProperties.getConnectionTimeout(); |
|
|
|
Integer connectTimeout = httpClientProperties.getConnectionTimeout(); |
|
|
|
this.okHttpClient = httpClientFactory.create(false, connectTimeout, TimeUnit.MILLISECONDS, |
|
|
|
this.okHttpClient = httpClientFactory.createBuilder(false). |
|
|
|
//TODO Remove read timeout constant after changing to builder pattern
|
|
|
|
connectTimeout(connectTimeout, TimeUnit.MILLISECONDS). |
|
|
|
followRedirects, 2000, TimeUnit.MILLISECONDS, connectionPool, null, |
|
|
|
followRedirects(followRedirects). |
|
|
|
null); |
|
|
|
connectionPool(connectionPool).build(); |
|
|
|
return this.okHttpClient; |
|
|
|
return this.okHttpClient; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -197,12 +203,18 @@ public class FeignRibbonClientAutoConfiguration { |
|
|
|
okHttpClient.connectionPool().evictAll(); |
|
|
|
okHttpClient.connectionPool().evictAll(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
|
|
|
@ConditionalOnClass(OkHttpClient.class) |
|
|
|
|
|
|
|
@ConditionalOnProperty(value = "feign.okhttp.enabled") |
|
|
|
|
|
|
|
protected static class OkHttpFeignLoadBalancedConfiguration { |
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
@Bean |
|
|
|
@ConditionalOnMissingBean(Client.class) |
|
|
|
@ConditionalOnMissingBean(Client.class) |
|
|
|
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory, |
|
|
|
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory, |
|
|
|
SpringClientFactory clientFactory) { |
|
|
|
SpringClientFactory clientFactory, okhttp3.OkHttpClient okHttpClient) { |
|
|
|
OkHttpClient delegate = new OkHttpClient(this.okHttpClient); |
|
|
|
OkHttpClient delegate = new OkHttpClient(okHttpClient); |
|
|
|
return new LoadBalancerFeignClient(delegate, cachingFactory, clientFactory); |
|
|
|
return new LoadBalancerFeignClient(delegate, cachingFactory, clientFactory); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|