Fixing code formatting
This commit is contained in:
@@ -45,8 +45,6 @@ import feign.httpclient.ApacheHttpClient;
|
||||
import feign.okhttp.OkHttpClient;
|
||||
|
||||
import javax.annotation.PreDestroy;
|
||||
import com.netflix.client.config.CommonClientConfigKey;
|
||||
import com.netflix.client.config.DefaultClientConfigImpl;
|
||||
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
@@ -54,7 +52,7 @@ import com.netflix.client.config.DefaultClientConfigImpl;
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnClass(Feign.class)
|
||||
@EnableConfigurationProperties({FeignHttpClientProperties.class})
|
||||
@EnableConfigurationProperties({ FeignHttpClientProperties.class })
|
||||
public class FeignAutoConfiguration {
|
||||
|
||||
@Autowired(required = false)
|
||||
@@ -110,12 +108,14 @@ public class FeignAutoConfiguration {
|
||||
private CloseableHttpClient httpClient;
|
||||
|
||||
@Bean
|
||||
public HttpClientConnectionManager connectionManager(ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
FeignHttpClientProperties httpClientProperties) {
|
||||
final HttpClientConnectionManager connectionManager = connectionManagerFactory.newConnectionManager(false, httpClientProperties.getMaxConnections(),
|
||||
httpClientProperties.getMaxConnectionsPerRoute(), httpClientProperties.getTimeToLive(),
|
||||
httpClientProperties.getTimeToLiveUnit(),
|
||||
registryBuilder);
|
||||
public HttpClientConnectionManager connectionManager(
|
||||
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
FeignHttpClientProperties httpClientProperties) {
|
||||
final HttpClientConnectionManager connectionManager = connectionManagerFactory
|
||||
.newConnectionManager(false, httpClientProperties.getMaxConnections(),
|
||||
httpClientProperties.getMaxConnectionsPerRoute(),
|
||||
httpClientProperties.getTimeToLive(),
|
||||
httpClientProperties.getTimeToLiveUnit(), registryBuilder);
|
||||
this.connectionManagerTimer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -126,13 +126,15 @@ public class FeignAutoConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory, HttpClientConnectionManager httpClientConnectionManager,
|
||||
FeignHttpClientProperties httpClientProperties) {
|
||||
RequestConfig defaultRequestConfig = RequestConfig.custom().
|
||||
setConnectTimeout(httpClientProperties.getConnectionTimeout()).
|
||||
setRedirectsEnabled(httpClientProperties.isFollowRedirects()).
|
||||
build();
|
||||
this.httpClient = httpClientFactory.createClient(defaultRequestConfig, httpClientConnectionManager);
|
||||
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory,
|
||||
HttpClientConnectionManager httpClientConnectionManager,
|
||||
FeignHttpClientProperties httpClientProperties) {
|
||||
RequestConfig defaultRequestConfig = RequestConfig.custom()
|
||||
.setConnectTimeout(httpClientProperties.getConnectionTimeout())
|
||||
.setRedirectsEnabled(httpClientProperties.isFollowRedirects())
|
||||
.build();
|
||||
this.httpClient = httpClientFactory.createClient(defaultRequestConfig,
|
||||
httpClientConnectionManager);
|
||||
return this.httpClient;
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ import javax.annotation.PreDestroy;
|
||||
@ConditionalOnClass({ ILoadBalancer.class, Feign.class })
|
||||
@Configuration
|
||||
@AutoConfigureBefore(FeignAutoConfiguration.class)
|
||||
@EnableConfigurationProperties({FeignHttpClientProperties.class})
|
||||
@EnableConfigurationProperties({ FeignHttpClientProperties.class })
|
||||
public class FeignRibbonClientAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@@ -74,7 +74,8 @@ public class FeignRibbonClientAutoConfiguration {
|
||||
@Primary
|
||||
@ConditionalOnClass(name = "org.springframework.retry.support.RetryTemplate")
|
||||
public CachingSpringLoadBalancerFactory retryabeCachingLBClientFactory(
|
||||
SpringClientFactory factory, LoadBalancedRetryPolicyFactory retryPolicyFactory) {
|
||||
SpringClientFactory factory,
|
||||
LoadBalancedRetryPolicyFactory retryPolicyFactory) {
|
||||
return new CachingSpringLoadBalancerFactory(factory, retryPolicyFactory, true);
|
||||
}
|
||||
|
||||
@@ -82,8 +83,8 @@ public class FeignRibbonClientAutoConfiguration {
|
||||
@ConditionalOnMissingBean
|
||||
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
|
||||
SpringClientFactory clientFactory) {
|
||||
return new LoadBalancerFeignClient(new Client.Default(null, null),
|
||||
cachingFactory, clientFactory);
|
||||
return new LoadBalancerFeignClient(new Client.Default(null, null), cachingFactory,
|
||||
clientFactory);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -106,12 +107,14 @@ public class FeignRibbonClientAutoConfiguration {
|
||||
private RegistryBuilder registryBuilder;
|
||||
|
||||
@Bean
|
||||
public HttpClientConnectionManager connectionManager(ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
FeignHttpClientProperties httpClientProperties) {
|
||||
final HttpClientConnectionManager connectionManager = connectionManagerFactory.newConnectionManager(false, httpClientProperties.getMaxConnections(),
|
||||
httpClientProperties.getMaxConnectionsPerRoute(), httpClientProperties.getTimeToLive(),
|
||||
httpClientProperties.getTimeToLiveUnit(),
|
||||
registryBuilder);
|
||||
public HttpClientConnectionManager connectionManager(
|
||||
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
FeignHttpClientProperties httpClientProperties) {
|
||||
final HttpClientConnectionManager connectionManager = connectionManagerFactory
|
||||
.newConnectionManager(false, httpClientProperties.getMaxConnections(),
|
||||
httpClientProperties.getMaxConnectionsPerRoute(),
|
||||
httpClientProperties.getTimeToLive(),
|
||||
httpClientProperties.getTimeToLiveUnit(), registryBuilder);
|
||||
this.connectionManagerTimer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -122,13 +125,15 @@ public class FeignRibbonClientAutoConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory, HttpClientConnectionManager httpClientConnectionManager,
|
||||
FeignHttpClientProperties httpClientProperties) {
|
||||
RequestConfig defaultRequestConfig = RequestConfig.custom().
|
||||
setConnectTimeout(httpClientProperties.getConnectionTimeout()).
|
||||
setRedirectsEnabled(httpClientProperties.isFollowRedirects()).
|
||||
build();
|
||||
this.httpClient = httpClientFactory.createClient(defaultRequestConfig, httpClientConnectionManager);
|
||||
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory,
|
||||
HttpClientConnectionManager httpClientConnectionManager,
|
||||
FeignHttpClientProperties httpClientProperties) {
|
||||
RequestConfig defaultRequestConfig = RequestConfig.custom()
|
||||
.setConnectTimeout(httpClientProperties.getConnectionTimeout())
|
||||
.setRedirectsEnabled(httpClientProperties.isFollowRedirects())
|
||||
.build();
|
||||
this.httpClient = httpClientFactory.createClient(defaultRequestConfig,
|
||||
httpClientConnectionManager);
|
||||
return this.httpClient;
|
||||
}
|
||||
|
||||
|
||||
@@ -146,26 +146,33 @@ public class RibbonClientConfiguration {
|
||||
private RegistryBuilder registryBuilder;
|
||||
|
||||
@Bean
|
||||
public HttpClientConnectionManager httpClientConnectionManager(IClientConfig config,
|
||||
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
ApacheHttpClientFactory httpClientFactory) {
|
||||
Integer maxTotalConnections = config.getPropertyAsInteger(CommonClientConfigKey.MaxTotalConnections,
|
||||
public HttpClientConnectionManager httpClientConnectionManager(
|
||||
IClientConfig config,
|
||||
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
ApacheHttpClientFactory httpClientFactory) {
|
||||
Integer maxTotalConnections = config.getPropertyAsInteger(
|
||||
CommonClientConfigKey.MaxTotalConnections,
|
||||
DefaultClientConfigImpl.DEFAULT_MAX_TOTAL_CONNECTIONS);
|
||||
Integer maxConnectionsPerHost = config.getPropertyAsInteger(CommonClientConfigKey.MaxConnectionsPerHost,
|
||||
Integer maxConnectionsPerHost = config.getPropertyAsInteger(
|
||||
CommonClientConfigKey.MaxConnectionsPerHost,
|
||||
DefaultClientConfigImpl.DEFAULT_MAX_CONNECTIONS_PER_HOST);
|
||||
Integer timerRepeat = config.getPropertyAsInteger(CommonClientConfigKey.ConnectionCleanerRepeatInterval,
|
||||
Integer timerRepeat = config.getPropertyAsInteger(
|
||||
CommonClientConfigKey.ConnectionCleanerRepeatInterval,
|
||||
DefaultClientConfigImpl.DEFAULT_CONNECTION_IDLE_TIMERTASK_REPEAT_IN_MSECS);
|
||||
Object timeToLiveObj = config.getProperty(CommonClientConfigKey.PoolKeepAliveTime);
|
||||
Object timeToLiveObj = config
|
||||
.getProperty(CommonClientConfigKey.PoolKeepAliveTime);
|
||||
Long timeToLive = DefaultClientConfigImpl.DEFAULT_POOL_KEEP_ALIVE_TIME;
|
||||
Object ttlUnitObj = config.getProperty(CommonClientConfigKey.PoolKeepAliveTimeUnits);
|
||||
Object ttlUnitObj = config
|
||||
.getProperty(CommonClientConfigKey.PoolKeepAliveTimeUnits);
|
||||
TimeUnit ttlUnit = DefaultClientConfigImpl.DEFAULT_POOL_KEEP_ALIVE_TIME_UNITS;
|
||||
if(timeToLiveObj instanceof Long) {
|
||||
timeToLive = (Long)timeToLiveObj;
|
||||
if (timeToLiveObj instanceof Long) {
|
||||
timeToLive = (Long) timeToLiveObj;
|
||||
}
|
||||
if(ttlUnitObj instanceof TimeUnit) {
|
||||
ttlUnit = (TimeUnit)ttlUnitObj;
|
||||
if (ttlUnitObj instanceof TimeUnit) {
|
||||
ttlUnit = (TimeUnit) ttlUnitObj;
|
||||
}
|
||||
final HttpClientConnectionManager connectionManager = connectionManagerFactory.newConnectionManager(false, maxTotalConnections,
|
||||
final HttpClientConnectionManager connectionManager = connectionManagerFactory
|
||||
.newConnectionManager(false, maxTotalConnections,
|
||||
maxConnectionsPerHost, timeToLive, ttlUnit, registryBuilder);
|
||||
this.connectionManagerTimer.schedule(new TimerTask() {
|
||||
@Override
|
||||
@@ -178,18 +185,18 @@ public class RibbonClientConfiguration {
|
||||
|
||||
@Bean
|
||||
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory,
|
||||
HttpClientConnectionManager connectionManager, IClientConfig config) {
|
||||
HttpClientConnectionManager connectionManager, IClientConfig config) {
|
||||
Boolean followRedirects = config.getPropertyAsBoolean(
|
||||
CommonClientConfigKey.FollowRedirects,
|
||||
DefaultClientConfigImpl.DEFAULT_FOLLOW_REDIRECTS);
|
||||
Integer connectTimeout = config.getPropertyAsInteger(
|
||||
CommonClientConfigKey.ConnectTimeout,
|
||||
DefaultClientConfigImpl.DEFAULT_CONNECT_TIMEOUT);
|
||||
RequestConfig defaultRequestConfig = RequestConfig.custom().
|
||||
setConnectTimeout(connectTimeout).
|
||||
setRedirectsEnabled(followRedirects).
|
||||
build();
|
||||
this.httpClient = httpClientFactory.createClient(defaultRequestConfig, connectionManager);
|
||||
RequestConfig defaultRequestConfig = RequestConfig.custom()
|
||||
.setConnectTimeout(connectTimeout)
|
||||
.setRedirectsEnabled(followRedirects).build();
|
||||
this.httpClient = httpClientFactory.createClient(defaultRequestConfig,
|
||||
connectionManager);
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
@@ -211,9 +218,10 @@ public class RibbonClientConfiguration {
|
||||
@ConditionalOnMissingClass(value = "org.springframework.retry.support.RetryTemplate")
|
||||
public RibbonLoadBalancingHttpClient ribbonLoadBalancingHttpClient(
|
||||
IClientConfig config, ServerIntrospector serverIntrospector,
|
||||
ILoadBalancer loadBalancer, RetryHandler retryHandler, CloseableHttpClient httpClient) {
|
||||
RibbonLoadBalancingHttpClient client = new RibbonLoadBalancingHttpClient(httpClient,
|
||||
config, serverIntrospector);
|
||||
ILoadBalancer loadBalancer, RetryHandler retryHandler,
|
||||
CloseableHttpClient httpClient) {
|
||||
RibbonLoadBalancingHttpClient client = new RibbonLoadBalancingHttpClient(
|
||||
httpClient, config, serverIntrospector);
|
||||
client.setLoadBalancer(loadBalancer);
|
||||
client.setRetryHandler(retryHandler);
|
||||
Monitors.registerObject("Client_" + this.name, client);
|
||||
@@ -228,8 +236,9 @@ public class RibbonClientConfiguration {
|
||||
ILoadBalancer loadBalancer, RetryHandler retryHandler,
|
||||
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory,
|
||||
CloseableHttpClient httpClient) {
|
||||
RetryableRibbonLoadBalancingHttpClient client = new RetryableRibbonLoadBalancingHttpClient(httpClient,
|
||||
config, serverIntrospector, loadBalancedRetryPolicyFactory);
|
||||
RetryableRibbonLoadBalancingHttpClient client = new RetryableRibbonLoadBalancingHttpClient(
|
||||
httpClient, config, serverIntrospector,
|
||||
loadBalancedRetryPolicyFactory);
|
||||
client.setLoadBalancer(loadBalancer);
|
||||
client.setRetryHandler(retryHandler);
|
||||
Monitors.registerObject("Client_" + this.name, client);
|
||||
@@ -244,18 +253,15 @@ public class RibbonClientConfiguration {
|
||||
@Value("${ribbon.client.name}")
|
||||
private String name = "client";
|
||||
|
||||
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(AbstractLoadBalancerAwareClient.class)
|
||||
@ConditionalOnClass(name = "org.springframework.retry.support.RetryTemplate")
|
||||
public RetryableOkHttpLoadBalancingClient okHttpLoadBalancingClient(IClientConfig config,
|
||||
ServerIntrospector serverIntrospector,
|
||||
ILoadBalancer loadBalancer,
|
||||
RetryHandler retryHandler,
|
||||
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) {
|
||||
RetryableOkHttpLoadBalancingClient client = new RetryableOkHttpLoadBalancingClient(config,
|
||||
serverIntrospector, loadBalancedRetryPolicyFactory);
|
||||
public RetryableOkHttpLoadBalancingClient okHttpLoadBalancingClient(
|
||||
IClientConfig config, ServerIntrospector serverIntrospector,
|
||||
ILoadBalancer loadBalancer, RetryHandler retryHandler,
|
||||
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) {
|
||||
RetryableOkHttpLoadBalancingClient client = new RetryableOkHttpLoadBalancingClient(
|
||||
config, serverIntrospector, loadBalancedRetryPolicyFactory);
|
||||
client.setLoadBalancer(loadBalancer);
|
||||
client.setRetryHandler(retryHandler);
|
||||
Monitors.registerObject("Client_" + this.name, client);
|
||||
@@ -265,9 +271,9 @@ public class RibbonClientConfiguration {
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(AbstractLoadBalancerAwareClient.class)
|
||||
@ConditionalOnMissingClass(value = "org.springframework.retry.support.RetryTemplate")
|
||||
public OkHttpLoadBalancingClient retryableOkHttpLoadBalancingClient(IClientConfig config,
|
||||
ServerIntrospector serverIntrospector, ILoadBalancer loadBalancer,
|
||||
RetryHandler retryHandler) {
|
||||
public OkHttpLoadBalancingClient retryableOkHttpLoadBalancingClient(
|
||||
IClientConfig config, ServerIntrospector serverIntrospector,
|
||||
ILoadBalancer loadBalancer, RetryHandler retryHandler) {
|
||||
OkHttpLoadBalancingClient client = new OkHttpLoadBalancingClient(config,
|
||||
serverIntrospector);
|
||||
client.setLoadBalancer(loadBalancer);
|
||||
@@ -284,21 +290,23 @@ public class RibbonClientConfiguration {
|
||||
private String name = "client";
|
||||
|
||||
/**
|
||||
* Create a Netflix {@link RestClient} integrated with Ribbon if none already exists
|
||||
* in the application context. It is not required for Ribbon to work properly and is
|
||||
* therefore created lazily if ever another component requires it.
|
||||
* Create a Netflix {@link RestClient} integrated with Ribbon if none already
|
||||
* exists in the application context. It is not required for Ribbon to work
|
||||
* properly and is therefore created lazily if ever another component requires it.
|
||||
*
|
||||
* @param config the configuration to use by the underlying Ribbon instance
|
||||
* @param loadBalancer the load balancer to use by the underlying Ribbon instance
|
||||
* @param serverIntrospector server introspector to use by the underlying Ribbon instance
|
||||
* @param retryHandler retry handler to use by the underlying Ribbon instance
|
||||
* @param config the configuration to use by the underlying Ribbon instance
|
||||
* @param loadBalancer the load balancer to use by the underlying Ribbon instance
|
||||
* @param serverIntrospector server introspector to use by the underlying Ribbon
|
||||
* instance
|
||||
* @param retryHandler retry handler to use by the underlying Ribbon instance
|
||||
* @return a {@link RestClient} instances backed by Ribbon
|
||||
*/
|
||||
@Bean
|
||||
@Lazy
|
||||
@ConditionalOnMissingBean(AbstractLoadBalancerAwareClient.class)
|
||||
public RestClient ribbonRestClient(IClientConfig config, ILoadBalancer loadBalancer,
|
||||
ServerIntrospector serverIntrospector, RetryHandler retryHandler) {
|
||||
public RestClient ribbonRestClient(IClientConfig config,
|
||||
ILoadBalancer loadBalancer, ServerIntrospector serverIntrospector,
|
||||
RetryHandler retryHandler) {
|
||||
RestClient client = new OverrideRestClient(config, serverIntrospector);
|
||||
client.setLoadBalancer(loadBalancer);
|
||||
client.setRetryHandler(retryHandler);
|
||||
@@ -339,8 +347,8 @@ public class RibbonClientConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public RibbonLoadBalancerContext ribbonLoadBalancerContext(
|
||||
ILoadBalancer loadBalancer, IClientConfig config, RetryHandler retryHandler) {
|
||||
public RibbonLoadBalancerContext ribbonLoadBalancerContext(ILoadBalancer loadBalancer,
|
||||
IClientConfig config, RetryHandler retryHandler) {
|
||||
return new RibbonLoadBalancerContext(loadBalancer, config, retryHandler);
|
||||
}
|
||||
|
||||
@@ -349,7 +357,7 @@ public class RibbonClientConfiguration {
|
||||
public RetryHandler retryHandler(IClientConfig config) {
|
||||
return new DefaultLoadBalancerRetryHandler(config);
|
||||
}
|
||||
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public ServerIntrospector serverIntrospector() {
|
||||
@@ -376,18 +384,16 @@ public class RibbonClientConfiguration {
|
||||
|
||||
@Override
|
||||
public URI reconstructURIWithServer(Server server, URI original) {
|
||||
URI uri = updateToHttpsIfNeeded(original, this.config, this.serverIntrospector, server);
|
||||
URI uri = updateToHttpsIfNeeded(original, this.config,
|
||||
this.serverIntrospector, server);
|
||||
return super.reconstructURIWithServer(server, uri);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Client apacheHttpClientSpecificInitialization() {
|
||||
ApacheHttpClient4 apache = (ApacheHttpClient4) super
|
||||
.apacheHttpClientSpecificInitialization();
|
||||
apache.getClientHandler()
|
||||
.getHttpClient()
|
||||
.getParams()
|
||||
.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.IGNORE_COOKIES);
|
||||
ApacheHttpClient4 apache = (ApacheHttpClient4) super.apacheHttpClientSpecificInitialization();
|
||||
apache.getClientHandler().getHttpClient().getParams().setParameter(
|
||||
ClientPNames.COOKIE_POLICY, CookiePolicy.IGNORE_COOKIES);
|
||||
return apache;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,75 +48,94 @@ import com.netflix.loadbalancer.Server;
|
||||
* An Apache HTTP client which leverages Spring Retry to retry failed requests.
|
||||
* @author Ryan Baxter
|
||||
*/
|
||||
public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingHttpClient implements ServiceInstanceChooser {
|
||||
private LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory =
|
||||
new LoadBalancedRetryPolicyFactory.NeverRetryFactory();
|
||||
public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingHttpClient
|
||||
implements ServiceInstanceChooser {
|
||||
private LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory = new LoadBalancedRetryPolicyFactory.NeverRetryFactory();
|
||||
|
||||
public RetryableRibbonLoadBalancingHttpClient(IClientConfig config, ServerIntrospector serverIntrospector,
|
||||
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) {
|
||||
public RetryableRibbonLoadBalancingHttpClient(IClientConfig config,
|
||||
ServerIntrospector serverIntrospector,
|
||||
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) {
|
||||
super(config, serverIntrospector);
|
||||
this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory;
|
||||
}
|
||||
public RetryableRibbonLoadBalancingHttpClient(CloseableHttpClient delegate, IClientConfig config, ServerIntrospector serverIntrospector,
|
||||
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) {
|
||||
|
||||
public RetryableRibbonLoadBalancingHttpClient(CloseableHttpClient delegate,
|
||||
IClientConfig config, ServerIntrospector serverIntrospector,
|
||||
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) {
|
||||
super(delegate, config, serverIntrospector);
|
||||
this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RibbonApacheHttpResponse execute(final RibbonApacheHttpRequest request, final IClientConfig configOverride) throws Exception {
|
||||
public RibbonApacheHttpResponse execute(final RibbonApacheHttpRequest request,
|
||||
final IClientConfig configOverride) throws Exception {
|
||||
final RequestConfig.Builder builder = RequestConfig.custom();
|
||||
IClientConfig config = configOverride != null ? configOverride : this.config;
|
||||
builder.setConnectTimeout(config.get(
|
||||
CommonClientConfigKey.ConnectTimeout, this.connectTimeout));
|
||||
builder.setSocketTimeout(config.get(
|
||||
CommonClientConfigKey.ReadTimeout, this.readTimeout));
|
||||
builder.setRedirectsEnabled(config.get(
|
||||
CommonClientConfigKey.FollowRedirects, this.followRedirects));
|
||||
builder.setConnectTimeout(
|
||||
config.get(CommonClientConfigKey.ConnectTimeout, this.connectTimeout));
|
||||
builder.setSocketTimeout(
|
||||
config.get(CommonClientConfigKey.ReadTimeout, this.readTimeout));
|
||||
builder.setRedirectsEnabled(
|
||||
config.get(CommonClientConfigKey.FollowRedirects, this.followRedirects));
|
||||
|
||||
final RequestConfig requestConfig = builder.build();
|
||||
final LoadBalancedRetryPolicy retryPolicy = loadBalancedRetryPolicyFactory.create(this.getClientName(), this);
|
||||
final LoadBalancedRetryPolicy retryPolicy = loadBalancedRetryPolicyFactory
|
||||
.create(this.getClientName(), this);
|
||||
RetryCallback retryCallback = new RetryCallback() {
|
||||
@Override
|
||||
public RibbonApacheHttpResponse doWithRetry(RetryContext context) throws Exception {
|
||||
//on retries the policy will choose the server and set it in the context
|
||||
//extract the server and update the request being made
|
||||
public RibbonApacheHttpResponse doWithRetry(RetryContext context)
|
||||
throws Exception {
|
||||
// on retries the policy will choose the server and set it in the context
|
||||
// extract the server and update the request being made
|
||||
RibbonApacheHttpRequest newRequest = request;
|
||||
if(context instanceof LoadBalancedRetryContext) {
|
||||
ServiceInstance service = ((LoadBalancedRetryContext)context).getServiceInstance();
|
||||
if(service != null) {
|
||||
//Reconstruct the request URI using the host and port set in the retry context
|
||||
newRequest = newRequest.withNewUri(new URI(service.getUri().getScheme(),
|
||||
newRequest.getURI().getUserInfo(), service.getHost(), service.getPort(),
|
||||
newRequest.getURI().getPath(), newRequest.getURI().getQuery(),
|
||||
if (context instanceof LoadBalancedRetryContext) {
|
||||
ServiceInstance service = ((LoadBalancedRetryContext) context)
|
||||
.getServiceInstance();
|
||||
if (service != null) {
|
||||
// Reconstruct the request URI using the host and port set in the
|
||||
// retry context
|
||||
newRequest = newRequest.withNewUri(new URI(
|
||||
service.getUri().getScheme(),
|
||||
newRequest.getURI().getUserInfo(), service.getHost(),
|
||||
service.getPort(), newRequest.getURI().getPath(),
|
||||
newRequest.getURI().getQuery(),
|
||||
newRequest.getURI().getFragment()));
|
||||
}
|
||||
}
|
||||
if (isSecure(configOverride)) {
|
||||
final URI secureUri = UriComponentsBuilder.fromUri(newRequest.getUri())
|
||||
.scheme("https").build().toUri();
|
||||
final URI secureUri = UriComponentsBuilder
|
||||
.fromUri(newRequest.getUri()).scheme("https").build().toUri();
|
||||
newRequest = newRequest.withNewUri(secureUri);
|
||||
}
|
||||
HttpUriRequest httpUriRequest = newRequest.toRequest(requestConfig);
|
||||
final HttpResponse httpResponse = RetryableRibbonLoadBalancingHttpClient.this.delegate.execute(httpUriRequest);
|
||||
if(retryPolicy.retryableStatusCode(httpResponse.getStatusLine().getStatusCode())) {
|
||||
if(CloseableHttpResponse.class.isInstance(httpResponse)) {
|
||||
((CloseableHttpResponse)httpResponse).close();
|
||||
final HttpResponse httpResponse = RetryableRibbonLoadBalancingHttpClient.this.delegate
|
||||
.execute(httpUriRequest);
|
||||
if (retryPolicy.retryableStatusCode(
|
||||
httpResponse.getStatusLine().getStatusCode())) {
|
||||
if (CloseableHttpResponse.class.isInstance(httpResponse)) {
|
||||
((CloseableHttpResponse) httpResponse).close();
|
||||
}
|
||||
throw new RetryableStatusCodeException(RetryableRibbonLoadBalancingHttpClient.this.clientName,
|
||||
throw new RetryableStatusCodeException(
|
||||
RetryableRibbonLoadBalancingHttpClient.this.clientName,
|
||||
httpResponse.getStatusLine().getStatusCode());
|
||||
}
|
||||
return new RibbonApacheHttpResponse(httpResponse, httpUriRequest.getURI());
|
||||
return new RibbonApacheHttpResponse(httpResponse,
|
||||
httpUriRequest.getURI());
|
||||
}
|
||||
};
|
||||
return this.executeWithRetry(request, retryPolicy, retryCallback);
|
||||
}
|
||||
|
||||
private RibbonApacheHttpResponse executeWithRetry(RibbonApacheHttpRequest request, LoadBalancedRetryPolicy retryPolicy, RetryCallback<RibbonApacheHttpResponse, IOException> callback) throws Exception {
|
||||
private RibbonApacheHttpResponse executeWithRetry(RibbonApacheHttpRequest request,
|
||||
LoadBalancedRetryPolicy retryPolicy,
|
||||
RetryCallback<RibbonApacheHttpResponse, IOException> callback)
|
||||
throws Exception {
|
||||
RetryTemplate retryTemplate = new RetryTemplate();
|
||||
boolean retryable = request.getContext() == null ? true :
|
||||
BooleanUtils.toBooleanDefaultIfNull(request.getContext().getRetryable(), true);
|
||||
retryTemplate.setRetryPolicy(retryPolicy == null || !retryable ? new NeverRetryPolicy()
|
||||
boolean retryable = request.getContext() == null ? true
|
||||
: BooleanUtils.toBooleanDefaultIfNull(request.getContext().getRetryable(),
|
||||
true);
|
||||
retryTemplate.setRetryPolicy(retryPolicy == null || !retryable
|
||||
? new NeverRetryPolicy()
|
||||
: new RetryPolicy(request, retryPolicy, this, this.getClientName()));
|
||||
return retryTemplate.execute(callback);
|
||||
}
|
||||
@@ -124,17 +143,18 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH
|
||||
@Override
|
||||
public ServiceInstance choose(String serviceId) {
|
||||
Server server = this.getLoadBalancer().chooseServer(serviceId);
|
||||
return new RibbonLoadBalancerClient.RibbonServer(serviceId,
|
||||
server);
|
||||
return new RibbonLoadBalancerClient.RibbonServer(serviceId, server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(RibbonApacheHttpRequest request, IClientConfig requestConfig) {
|
||||
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
|
||||
RibbonApacheHttpRequest request, IClientConfig requestConfig) {
|
||||
return new RequestSpecificRetryHandler(false, false, RetryHandler.DEFAULT, null);
|
||||
}
|
||||
|
||||
static class RetryPolicy extends FeignRetryPolicy {
|
||||
public RetryPolicy(HttpRequest request, LoadBalancedRetryPolicy policy, ServiceInstanceChooser serviceInstanceChooser, String serviceName) {
|
||||
public RetryPolicy(HttpRequest request, LoadBalancedRetryPolicy policy,
|
||||
ServiceInstanceChooser serviceInstanceChooser, String serviceName) {
|
||||
super(request, policy, serviceInstanceChooser, serviceName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,26 +38,29 @@ import static org.springframework.cloud.netflix.ribbon.RibbonUtils.updateToHttps
|
||||
* @author Christian Lohmann
|
||||
* @author Ryan Baxter
|
||||
*/
|
||||
//TODO: rename (ie new class that extends this in Dalston) to ApacheHttpLoadBalancingClient
|
||||
// TODO: rename (ie new class that extends this in Dalston) to ApacheHttpLoadBalancingClient
|
||||
public class RibbonLoadBalancingHttpClient extends
|
||||
AbstractLoadBalancingClient<RibbonApacheHttpRequest, RibbonApacheHttpResponse, CloseableHttpClient> {
|
||||
|
||||
public RibbonLoadBalancingHttpClient(IClientConfig config, ServerIntrospector serverIntrospector) {
|
||||
public RibbonLoadBalancingHttpClient(IClientConfig config,
|
||||
ServerIntrospector serverIntrospector) {
|
||||
super(config, serverIntrospector);
|
||||
}
|
||||
|
||||
public RibbonLoadBalancingHttpClient(CloseableHttpClient delegate, IClientConfig config, ServerIntrospector serverIntrospector) {
|
||||
public RibbonLoadBalancingHttpClient(CloseableHttpClient delegate,
|
||||
IClientConfig config, ServerIntrospector serverIntrospector) {
|
||||
super(delegate, config, serverIntrospector);
|
||||
}
|
||||
|
||||
protected CloseableHttpClient createDelegate(IClientConfig config) {
|
||||
return HttpClientBuilder.create()
|
||||
// already defaults to 0 in builder, so resetting to 0 won't hurt
|
||||
.setMaxConnTotal(config.getPropertyAsInteger(CommonClientConfigKey.MaxTotalConnections, 0))
|
||||
.setMaxConnTotal(config.getPropertyAsInteger(
|
||||
CommonClientConfigKey.MaxTotalConnections, 0))
|
||||
// already defaults to 0 in builder, so resetting to 0 won't hurt
|
||||
.setMaxConnPerRoute(config.getPropertyAsInteger(CommonClientConfigKey.MaxConnectionsPerHost, 0))
|
||||
.disableCookieManagement()
|
||||
.useSystemProperties() // for proxy
|
||||
.setMaxConnPerRoute(config.getPropertyAsInteger(
|
||||
CommonClientConfigKey.MaxConnectionsPerHost, 0))
|
||||
.disableCookieManagement().useSystemProperties() // for proxy
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -66,12 +69,12 @@ public class RibbonLoadBalancingHttpClient extends
|
||||
final IClientConfig configOverride) throws Exception {
|
||||
final RequestConfig.Builder builder = RequestConfig.custom();
|
||||
IClientConfig config = configOverride != null ? configOverride : this.config;
|
||||
builder.setConnectTimeout(config.get(
|
||||
CommonClientConfigKey.ConnectTimeout, this.connectTimeout));
|
||||
builder.setSocketTimeout(config.get(
|
||||
CommonClientConfigKey.ReadTimeout, this.readTimeout));
|
||||
builder.setRedirectsEnabled(config.get(
|
||||
CommonClientConfigKey.FollowRedirects, this.followRedirects));
|
||||
builder.setConnectTimeout(
|
||||
config.get(CommonClientConfigKey.ConnectTimeout, this.connectTimeout));
|
||||
builder.setSocketTimeout(
|
||||
config.get(CommonClientConfigKey.ReadTimeout, this.readTimeout));
|
||||
builder.setRedirectsEnabled(
|
||||
config.get(CommonClientConfigKey.FollowRedirects, this.followRedirects));
|
||||
|
||||
final RequestConfig requestConfig = builder.build();
|
||||
if (isSecure(configOverride)) {
|
||||
@@ -86,13 +89,15 @@ public class RibbonLoadBalancingHttpClient extends
|
||||
|
||||
@Override
|
||||
public URI reconstructURIWithServer(Server server, URI original) {
|
||||
URI uri = updateToHttpsIfNeeded(original, this.config, this.serverIntrospector, server);
|
||||
URI uri = updateToHttpsIfNeeded(original, this.config, this.serverIntrospector,
|
||||
server);
|
||||
return super.reconstructURIWithServer(server, uri);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(RibbonApacheHttpRequest request, IClientConfig requestConfig) {
|
||||
return new RequestSpecificRetryHandler(false, false,
|
||||
RetryHandler.DEFAULT, requestConfig);
|
||||
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
|
||||
RibbonApacheHttpRequest request, IClientConfig requestConfig) {
|
||||
return new RequestSpecificRetryHandler(false, false, RetryHandler.DEFAULT,
|
||||
requestConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ import org.springframework.context.annotation.Import;
|
||||
@Import({ RibbonCommandFactoryConfiguration.RestClientRibbonConfiguration.class,
|
||||
RibbonCommandFactoryConfiguration.OkHttpRibbonConfiguration.class,
|
||||
RibbonCommandFactoryConfiguration.HttpClientRibbonConfiguration.class,
|
||||
HttpClientConfiguration.class})
|
||||
HttpClientConfiguration.class })
|
||||
@ConditionalOnBean(ZuulProxyMarkerConfiguration.Marker.class)
|
||||
public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
|
||||
|
||||
@@ -79,37 +79,42 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
|
||||
|
||||
@Override
|
||||
public HasFeatures zuulFeature() {
|
||||
return HasFeatures.namedFeature("Zuul (Discovery)", ZuulProxyAutoConfiguration.class);
|
||||
return HasFeatures.namedFeature("Zuul (Discovery)",
|
||||
ZuulProxyAutoConfiguration.class);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(DiscoveryClientRouteLocator.class)
|
||||
public DiscoveryClientRouteLocator discoveryRouteLocator() {
|
||||
return new DiscoveryClientRouteLocator(this.server.getServletPrefix(), this.discovery, this.zuulProperties,
|
||||
this.serviceRouteMapper);
|
||||
return new DiscoveryClientRouteLocator(this.server.getServletPrefix(),
|
||||
this.discovery, this.zuulProperties, this.serviceRouteMapper);
|
||||
}
|
||||
|
||||
// pre filters
|
||||
@Bean
|
||||
public PreDecorationFilter preDecorationFilter(RouteLocator routeLocator, ProxyRequestHelper proxyRequestHelper) {
|
||||
return new PreDecorationFilter(routeLocator, this.server.getServletPrefix(), this.zuulProperties,
|
||||
proxyRequestHelper);
|
||||
public PreDecorationFilter preDecorationFilter(RouteLocator routeLocator,
|
||||
ProxyRequestHelper proxyRequestHelper) {
|
||||
return new PreDecorationFilter(routeLocator, this.server.getServletPrefix(),
|
||||
this.zuulProperties, proxyRequestHelper);
|
||||
}
|
||||
|
||||
// route filters
|
||||
@Bean
|
||||
public RibbonRoutingFilter ribbonRoutingFilter(ProxyRequestHelper helper,
|
||||
RibbonCommandFactory<?> ribbonCommandFactory) {
|
||||
RibbonRoutingFilter filter = new RibbonRoutingFilter(helper, ribbonCommandFactory, this.requestCustomizers);
|
||||
RibbonRoutingFilter filter = new RibbonRoutingFilter(helper, ribbonCommandFactory,
|
||||
this.requestCustomizers);
|
||||
return filter;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(SimpleHostRoutingFilter.class)
|
||||
public SimpleHostRoutingFilter simpleHostRoutingFilter(ProxyRequestHelper helper, ZuulProperties zuulProperties,
|
||||
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
ApacheHttpClientFactory httpClientFactory) {
|
||||
return new SimpleHostRoutingFilter(helper, zuulProperties, connectionManagerFactory, httpClientFactory);
|
||||
public SimpleHostRoutingFilter simpleHostRoutingFilter(ProxyRequestHelper helper,
|
||||
ZuulProperties zuulProperties,
|
||||
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
ApacheHttpClientFactory httpClientFactory) {
|
||||
return new SimpleHostRoutingFilter(helper, zuulProperties,
|
||||
connectionManagerFactory, httpClientFactory);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -150,7 +155,8 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RoutesMvcEndpoint zuulMvcEndpoint(RouteLocator routeLocator, RoutesEndpoint endpoint) {
|
||||
public RoutesMvcEndpoint zuulMvcEndpoint(RouteLocator routeLocator,
|
||||
RoutesEndpoint endpoint) {
|
||||
return new RoutesMvcEndpoint(endpoint, routeLocator);
|
||||
}
|
||||
|
||||
@@ -166,7 +172,8 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
|
||||
}
|
||||
}
|
||||
|
||||
private static class ZuulDiscoveryRefreshListener implements ApplicationListener<ApplicationEvent> {
|
||||
private static class ZuulDiscoveryRefreshListener
|
||||
implements ApplicationListener<ApplicationEvent> {
|
||||
|
||||
private HeartbeatMonitor monitor = new HeartbeatMonitor();
|
||||
|
||||
|
||||
@@ -67,8 +67,8 @@ import static org.springframework.cloud.netflix.zuul.filters.support.FilterConst
|
||||
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SIMPLE_HOST_ROUTING_FILTER_ORDER;
|
||||
|
||||
/**
|
||||
* Route {@link ZuulFilter} that sends requests to predetermined URLs via apache {@link HttpClient}.
|
||||
* URLs are found in {@link RequestContext#getRouteHost()}.
|
||||
* Route {@link ZuulFilter} that sends requests to predetermined URLs via apache
|
||||
* {@link HttpClient}. URLs are found in {@link RequestContext#getRouteHost()}.
|
||||
*
|
||||
* @author Spencer Gibb
|
||||
* @author Dave Syer
|
||||
@@ -114,8 +114,8 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
|
||||
}
|
||||
|
||||
public SimpleHostRoutingFilter(ProxyRequestHelper helper, ZuulProperties properties,
|
||||
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
ApacheHttpClientFactory httpClientFactory) {
|
||||
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
|
||||
ApacheHttpClientFactory httpClientFactory) {
|
||||
this.helper = helper;
|
||||
this.hostProperties = properties.getHost();
|
||||
this.sslHostnameValidationEnabled = properties.isSslHostnameValidationEnabled();
|
||||
@@ -127,9 +127,12 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
|
||||
|
||||
@PostConstruct
|
||||
private void initialize() {
|
||||
this.connectionManager = connectionManagerFactory.newConnectionManager(this.sslHostnameValidationEnabled,
|
||||
this.hostProperties.getMaxTotalConnections(), this.hostProperties.getMaxPerRouteConnections(),
|
||||
this.hostProperties.getTimeToLive(), this.hostProperties.getTimeUnit(), null);
|
||||
this.connectionManager = connectionManagerFactory.newConnectionManager(
|
||||
this.sslHostnameValidationEnabled,
|
||||
this.hostProperties.getMaxTotalConnections(),
|
||||
this.hostProperties.getMaxPerRouteConnections(),
|
||||
this.hostProperties.getTimeToLive(), this.hostProperties.getTimeUnit(),
|
||||
null);
|
||||
this.httpClient = newClient();
|
||||
this.connectionManagerTimer.schedule(new TimerTask() {
|
||||
@Override
|
||||
@@ -220,9 +223,11 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
|
||||
contentType = ContentType.parse(request.getContentType());
|
||||
}
|
||||
|
||||
InputStreamEntity entity = new InputStreamEntity(requestEntity, contentLength, contentType);
|
||||
InputStreamEntity entity = new InputStreamEntity(requestEntity, contentLength,
|
||||
contentType);
|
||||
|
||||
HttpRequest httpRequest = buildHttpRequest(verb, uri, entity, headers, params, request);
|
||||
HttpRequest httpRequest = buildHttpRequest(verb, uri, entity, headers, params,
|
||||
request);
|
||||
try {
|
||||
log.debug(httpHost.getHostName() + " " + httpHost.getPort() + " "
|
||||
+ httpHost.getSchemeName());
|
||||
@@ -248,30 +253,30 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
|
||||
? getEncodedQueryString(request) : this.helper.getQueryString(params));
|
||||
|
||||
switch (verb.toUpperCase()) {
|
||||
case "POST":
|
||||
HttpPost httpPost = new HttpPost(uriWithQueryString);
|
||||
httpRequest = httpPost;
|
||||
httpPost.setEntity(entity);
|
||||
break;
|
||||
case "PUT":
|
||||
HttpPut httpPut = new HttpPut(uriWithQueryString);
|
||||
httpRequest = httpPut;
|
||||
httpPut.setEntity(entity);
|
||||
break;
|
||||
case "PATCH":
|
||||
HttpPatch httpPatch = new HttpPatch(uriWithQueryString);
|
||||
httpRequest = httpPatch;
|
||||
httpPatch.setEntity(entity);
|
||||
break;
|
||||
case "DELETE":
|
||||
BasicHttpEntityEnclosingRequest entityRequest = new BasicHttpEntityEnclosingRequest(
|
||||
verb, uriWithQueryString);
|
||||
httpRequest = entityRequest;
|
||||
entityRequest.setEntity(entity);
|
||||
break;
|
||||
default:
|
||||
httpRequest = new BasicHttpRequest(verb, uriWithQueryString);
|
||||
log.debug(uriWithQueryString);
|
||||
case "POST":
|
||||
HttpPost httpPost = new HttpPost(uriWithQueryString);
|
||||
httpRequest = httpPost;
|
||||
httpPost.setEntity(entity);
|
||||
break;
|
||||
case "PUT":
|
||||
HttpPut httpPut = new HttpPut(uriWithQueryString);
|
||||
httpRequest = httpPut;
|
||||
httpPut.setEntity(entity);
|
||||
break;
|
||||
case "PATCH":
|
||||
HttpPatch httpPatch = new HttpPatch(uriWithQueryString);
|
||||
httpRequest = httpPatch;
|
||||
httpPatch.setEntity(entity);
|
||||
break;
|
||||
case "DELETE":
|
||||
BasicHttpEntityEnclosingRequest entityRequest = new BasicHttpEntityEnclosingRequest(
|
||||
verb, uriWithQueryString);
|
||||
httpRequest = entityRequest;
|
||||
entityRequest.setEntity(entity);
|
||||
break;
|
||||
default:
|
||||
httpRequest = new BasicHttpRequest(verb, uriWithQueryString);
|
||||
log.debug(uriWithQueryString);
|
||||
}
|
||||
|
||||
httpRequest.setHeaders(convertHeaders(headers));
|
||||
|
||||
Reference in New Issue
Block a user