Commit 572305d7 by Ryan Baxter

Fixing code formatting

parent 2aa93abc
...@@ -45,8 +45,6 @@ import feign.httpclient.ApacheHttpClient; ...@@ -45,8 +45,6 @@ import feign.httpclient.ApacheHttpClient;
import feign.okhttp.OkHttpClient; import feign.okhttp.OkHttpClient;
import javax.annotation.PreDestroy; import javax.annotation.PreDestroy;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
/** /**
* @author Spencer Gibb * @author Spencer Gibb
...@@ -54,7 +52,7 @@ import com.netflix.client.config.DefaultClientConfigImpl; ...@@ -54,7 +52,7 @@ import com.netflix.client.config.DefaultClientConfigImpl;
*/ */
@Configuration @Configuration
@ConditionalOnClass(Feign.class) @ConditionalOnClass(Feign.class)
@EnableConfigurationProperties({FeignHttpClientProperties.class}) @EnableConfigurationProperties({ FeignHttpClientProperties.class })
public class FeignAutoConfiguration { public class FeignAutoConfiguration {
@Autowired(required = false) @Autowired(required = false)
...@@ -110,12 +108,14 @@ public class FeignAutoConfiguration { ...@@ -110,12 +108,14 @@ public class FeignAutoConfiguration {
private CloseableHttpClient httpClient; private CloseableHttpClient httpClient;
@Bean @Bean
public HttpClientConnectionManager connectionManager(ApacheHttpClientConnectionManagerFactory connectionManagerFactory, public HttpClientConnectionManager connectionManager(
FeignHttpClientProperties httpClientProperties) { ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
final HttpClientConnectionManager connectionManager = connectionManagerFactory.newConnectionManager(false, httpClientProperties.getMaxConnections(), FeignHttpClientProperties httpClientProperties) {
httpClientProperties.getMaxConnectionsPerRoute(), httpClientProperties.getTimeToLive(), final HttpClientConnectionManager connectionManager = connectionManagerFactory
httpClientProperties.getTimeToLiveUnit(), .newConnectionManager(false, httpClientProperties.getMaxConnections(),
registryBuilder); httpClientProperties.getMaxConnectionsPerRoute(),
httpClientProperties.getTimeToLive(),
httpClientProperties.getTimeToLiveUnit(), registryBuilder);
this.connectionManagerTimer.schedule(new TimerTask() { this.connectionManagerTimer.schedule(new TimerTask() {
@Override @Override
public void run() { public void run() {
...@@ -126,13 +126,15 @@ public class FeignAutoConfiguration { ...@@ -126,13 +126,15 @@ public class FeignAutoConfiguration {
} }
@Bean @Bean
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory, HttpClientConnectionManager httpClientConnectionManager, public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory,
FeignHttpClientProperties httpClientProperties) { HttpClientConnectionManager httpClientConnectionManager,
RequestConfig defaultRequestConfig = RequestConfig.custom(). FeignHttpClientProperties httpClientProperties) {
setConnectTimeout(httpClientProperties.getConnectionTimeout()). RequestConfig defaultRequestConfig = RequestConfig.custom()
setRedirectsEnabled(httpClientProperties.isFollowRedirects()). .setConnectTimeout(httpClientProperties.getConnectionTimeout())
build(); .setRedirectsEnabled(httpClientProperties.isFollowRedirects())
this.httpClient = httpClientFactory.createClient(defaultRequestConfig, httpClientConnectionManager); .build();
this.httpClient = httpClientFactory.createClient(defaultRequestConfig,
httpClientConnectionManager);
return this.httpClient; return this.httpClient;
} }
......
...@@ -59,7 +59,7 @@ import javax.annotation.PreDestroy; ...@@ -59,7 +59,7 @@ import javax.annotation.PreDestroy;
@ConditionalOnClass({ ILoadBalancer.class, Feign.class }) @ConditionalOnClass({ ILoadBalancer.class, Feign.class })
@Configuration @Configuration
@AutoConfigureBefore(FeignAutoConfiguration.class) @AutoConfigureBefore(FeignAutoConfiguration.class)
@EnableConfigurationProperties({FeignHttpClientProperties.class}) @EnableConfigurationProperties({ FeignHttpClientProperties.class })
public class FeignRibbonClientAutoConfiguration { public class FeignRibbonClientAutoConfiguration {
@Bean @Bean
...@@ -74,7 +74,8 @@ public class FeignRibbonClientAutoConfiguration { ...@@ -74,7 +74,8 @@ public class FeignRibbonClientAutoConfiguration {
@Primary @Primary
@ConditionalOnClass(name = "org.springframework.retry.support.RetryTemplate") @ConditionalOnClass(name = "org.springframework.retry.support.RetryTemplate")
public CachingSpringLoadBalancerFactory retryabeCachingLBClientFactory( public CachingSpringLoadBalancerFactory retryabeCachingLBClientFactory(
SpringClientFactory factory, LoadBalancedRetryPolicyFactory retryPolicyFactory) { SpringClientFactory factory,
LoadBalancedRetryPolicyFactory retryPolicyFactory) {
return new CachingSpringLoadBalancerFactory(factory, retryPolicyFactory, true); return new CachingSpringLoadBalancerFactory(factory, retryPolicyFactory, true);
} }
...@@ -82,8 +83,8 @@ public class FeignRibbonClientAutoConfiguration { ...@@ -82,8 +83,8 @@ public class FeignRibbonClientAutoConfiguration {
@ConditionalOnMissingBean @ConditionalOnMissingBean
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory, public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
SpringClientFactory clientFactory) { SpringClientFactory clientFactory) {
return new LoadBalancerFeignClient(new Client.Default(null, null), return new LoadBalancerFeignClient(new Client.Default(null, null), cachingFactory,
cachingFactory, clientFactory); clientFactory);
} }
@Bean @Bean
...@@ -106,12 +107,14 @@ public class FeignRibbonClientAutoConfiguration { ...@@ -106,12 +107,14 @@ public class FeignRibbonClientAutoConfiguration {
private RegistryBuilder registryBuilder; private RegistryBuilder registryBuilder;
@Bean @Bean
public HttpClientConnectionManager connectionManager(ApacheHttpClientConnectionManagerFactory connectionManagerFactory, public HttpClientConnectionManager connectionManager(
FeignHttpClientProperties httpClientProperties) { ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
final HttpClientConnectionManager connectionManager = connectionManagerFactory.newConnectionManager(false, httpClientProperties.getMaxConnections(), FeignHttpClientProperties httpClientProperties) {
httpClientProperties.getMaxConnectionsPerRoute(), httpClientProperties.getTimeToLive(), final HttpClientConnectionManager connectionManager = connectionManagerFactory
httpClientProperties.getTimeToLiveUnit(), .newConnectionManager(false, httpClientProperties.getMaxConnections(),
registryBuilder); httpClientProperties.getMaxConnectionsPerRoute(),
httpClientProperties.getTimeToLive(),
httpClientProperties.getTimeToLiveUnit(), registryBuilder);
this.connectionManagerTimer.schedule(new TimerTask() { this.connectionManagerTimer.schedule(new TimerTask() {
@Override @Override
public void run() { public void run() {
...@@ -122,13 +125,15 @@ public class FeignRibbonClientAutoConfiguration { ...@@ -122,13 +125,15 @@ public class FeignRibbonClientAutoConfiguration {
} }
@Bean @Bean
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory, HttpClientConnectionManager httpClientConnectionManager, public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory,
FeignHttpClientProperties httpClientProperties) { HttpClientConnectionManager httpClientConnectionManager,
RequestConfig defaultRequestConfig = RequestConfig.custom(). FeignHttpClientProperties httpClientProperties) {
setConnectTimeout(httpClientProperties.getConnectionTimeout()). RequestConfig defaultRequestConfig = RequestConfig.custom()
setRedirectsEnabled(httpClientProperties.isFollowRedirects()). .setConnectTimeout(httpClientProperties.getConnectionTimeout())
build(); .setRedirectsEnabled(httpClientProperties.isFollowRedirects())
this.httpClient = httpClientFactory.createClient(defaultRequestConfig, httpClientConnectionManager); .build();
this.httpClient = httpClientFactory.createClient(defaultRequestConfig,
httpClientConnectionManager);
return this.httpClient; return this.httpClient;
} }
......
...@@ -48,75 +48,94 @@ import com.netflix.loadbalancer.Server; ...@@ -48,75 +48,94 @@ import com.netflix.loadbalancer.Server;
* An Apache HTTP client which leverages Spring Retry to retry failed requests. * An Apache HTTP client which leverages Spring Retry to retry failed requests.
* @author Ryan Baxter * @author Ryan Baxter
*/ */
public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingHttpClient implements ServiceInstanceChooser { public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingHttpClient
private LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory = implements ServiceInstanceChooser {
new LoadBalancedRetryPolicyFactory.NeverRetryFactory(); private LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory = new LoadBalancedRetryPolicyFactory.NeverRetryFactory();
public RetryableRibbonLoadBalancingHttpClient(IClientConfig config, ServerIntrospector serverIntrospector, public RetryableRibbonLoadBalancingHttpClient(IClientConfig config,
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) { ServerIntrospector serverIntrospector,
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) {
super(config, serverIntrospector); super(config, serverIntrospector);
this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; 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); super(delegate, config, serverIntrospector);
this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory;
} }
@Override @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(); final RequestConfig.Builder builder = RequestConfig.custom();
IClientConfig config = configOverride != null ? configOverride : this.config; IClientConfig config = configOverride != null ? configOverride : this.config;
builder.setConnectTimeout(config.get( builder.setConnectTimeout(
CommonClientConfigKey.ConnectTimeout, this.connectTimeout)); config.get(CommonClientConfigKey.ConnectTimeout, this.connectTimeout));
builder.setSocketTimeout(config.get( builder.setSocketTimeout(
CommonClientConfigKey.ReadTimeout, this.readTimeout)); config.get(CommonClientConfigKey.ReadTimeout, this.readTimeout));
builder.setRedirectsEnabled(config.get( builder.setRedirectsEnabled(
CommonClientConfigKey.FollowRedirects, this.followRedirects)); config.get(CommonClientConfigKey.FollowRedirects, this.followRedirects));
final RequestConfig requestConfig = builder.build(); 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() { RetryCallback retryCallback = new RetryCallback() {
@Override @Override
public RibbonApacheHttpResponse doWithRetry(RetryContext context) throws Exception { public RibbonApacheHttpResponse doWithRetry(RetryContext context)
//on retries the policy will choose the server and set it in the context throws Exception {
//extract the server and update the request being made // 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; RibbonApacheHttpRequest newRequest = request;
if(context instanceof LoadBalancedRetryContext) { if (context instanceof LoadBalancedRetryContext) {
ServiceInstance service = ((LoadBalancedRetryContext)context).getServiceInstance(); ServiceInstance service = ((LoadBalancedRetryContext) context)
if(service != null) { .getServiceInstance();
//Reconstruct the request URI using the host and port set in the retry context if (service != null) {
newRequest = newRequest.withNewUri(new URI(service.getUri().getScheme(), // Reconstruct the request URI using the host and port set in the
newRequest.getURI().getUserInfo(), service.getHost(), service.getPort(), // retry context
newRequest.getURI().getPath(), newRequest.getURI().getQuery(), newRequest = newRequest.withNewUri(new URI(
service.getUri().getScheme(),
newRequest.getURI().getUserInfo(), service.getHost(),
service.getPort(), newRequest.getURI().getPath(),
newRequest.getURI().getQuery(),
newRequest.getURI().getFragment())); newRequest.getURI().getFragment()));
} }
} }
if (isSecure(configOverride)) { if (isSecure(configOverride)) {
final URI secureUri = UriComponentsBuilder.fromUri(newRequest.getUri()) final URI secureUri = UriComponentsBuilder
.scheme("https").build().toUri(); .fromUri(newRequest.getUri()).scheme("https").build().toUri();
newRequest = newRequest.withNewUri(secureUri); newRequest = newRequest.withNewUri(secureUri);
} }
HttpUriRequest httpUriRequest = newRequest.toRequest(requestConfig); HttpUriRequest httpUriRequest = newRequest.toRequest(requestConfig);
final HttpResponse httpResponse = RetryableRibbonLoadBalancingHttpClient.this.delegate.execute(httpUriRequest); final HttpResponse httpResponse = RetryableRibbonLoadBalancingHttpClient.this.delegate
if(retryPolicy.retryableStatusCode(httpResponse.getStatusLine().getStatusCode())) { .execute(httpUriRequest);
if(CloseableHttpResponse.class.isInstance(httpResponse)) { if (retryPolicy.retryableStatusCode(
((CloseableHttpResponse)httpResponse).close(); 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()); httpResponse.getStatusLine().getStatusCode());
} }
return new RibbonApacheHttpResponse(httpResponse, httpUriRequest.getURI()); return new RibbonApacheHttpResponse(httpResponse,
httpUriRequest.getURI());
} }
}; };
return this.executeWithRetry(request, retryPolicy, retryCallback); 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(); RetryTemplate retryTemplate = new RetryTemplate();
boolean retryable = request.getContext() == null ? true : boolean retryable = request.getContext() == null ? true
BooleanUtils.toBooleanDefaultIfNull(request.getContext().getRetryable(), true); : BooleanUtils.toBooleanDefaultIfNull(request.getContext().getRetryable(),
retryTemplate.setRetryPolicy(retryPolicy == null || !retryable ? new NeverRetryPolicy() true);
retryTemplate.setRetryPolicy(retryPolicy == null || !retryable
? new NeverRetryPolicy()
: new RetryPolicy(request, retryPolicy, this, this.getClientName())); : new RetryPolicy(request, retryPolicy, this, this.getClientName()));
return retryTemplate.execute(callback); return retryTemplate.execute(callback);
} }
...@@ -124,17 +143,18 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH ...@@ -124,17 +143,18 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH
@Override @Override
public ServiceInstance choose(String serviceId) { public ServiceInstance choose(String serviceId) {
Server server = this.getLoadBalancer().chooseServer(serviceId); Server server = this.getLoadBalancer().chooseServer(serviceId);
return new RibbonLoadBalancerClient.RibbonServer(serviceId, return new RibbonLoadBalancerClient.RibbonServer(serviceId, server);
server);
} }
@Override @Override
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(RibbonApacheHttpRequest request, IClientConfig requestConfig) { public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
RibbonApacheHttpRequest request, IClientConfig requestConfig) {
return new RequestSpecificRetryHandler(false, false, RetryHandler.DEFAULT, null); return new RequestSpecificRetryHandler(false, false, RetryHandler.DEFAULT, null);
} }
static class RetryPolicy extends FeignRetryPolicy { 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); super(request, policy, serviceInstanceChooser, serviceName);
} }
} }
......
...@@ -38,26 +38,29 @@ import static org.springframework.cloud.netflix.ribbon.RibbonUtils.updateToHttps ...@@ -38,26 +38,29 @@ import static org.springframework.cloud.netflix.ribbon.RibbonUtils.updateToHttps
* @author Christian Lohmann * @author Christian Lohmann
* @author Ryan Baxter * @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 public class RibbonLoadBalancingHttpClient extends
AbstractLoadBalancingClient<RibbonApacheHttpRequest, RibbonApacheHttpResponse, CloseableHttpClient> { AbstractLoadBalancingClient<RibbonApacheHttpRequest, RibbonApacheHttpResponse, CloseableHttpClient> {
public RibbonLoadBalancingHttpClient(IClientConfig config, ServerIntrospector serverIntrospector) { public RibbonLoadBalancingHttpClient(IClientConfig config,
ServerIntrospector serverIntrospector) {
super(config, serverIntrospector); super(config, serverIntrospector);
} }
public RibbonLoadBalancingHttpClient(CloseableHttpClient delegate, IClientConfig config, ServerIntrospector serverIntrospector) { public RibbonLoadBalancingHttpClient(CloseableHttpClient delegate,
IClientConfig config, ServerIntrospector serverIntrospector) {
super(delegate, config, serverIntrospector); super(delegate, config, serverIntrospector);
} }
protected CloseableHttpClient createDelegate(IClientConfig config) { protected CloseableHttpClient createDelegate(IClientConfig config) {
return HttpClientBuilder.create() return HttpClientBuilder.create()
// already defaults to 0 in builder, so resetting to 0 won't hurt // 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 // already defaults to 0 in builder, so resetting to 0 won't hurt
.setMaxConnPerRoute(config.getPropertyAsInteger(CommonClientConfigKey.MaxConnectionsPerHost, 0)) .setMaxConnPerRoute(config.getPropertyAsInteger(
.disableCookieManagement() CommonClientConfigKey.MaxConnectionsPerHost, 0))
.useSystemProperties() // for proxy .disableCookieManagement().useSystemProperties() // for proxy
.build(); .build();
} }
...@@ -66,12 +69,12 @@ public class RibbonLoadBalancingHttpClient extends ...@@ -66,12 +69,12 @@ public class RibbonLoadBalancingHttpClient extends
final IClientConfig configOverride) throws Exception { final IClientConfig configOverride) throws Exception {
final RequestConfig.Builder builder = RequestConfig.custom(); final RequestConfig.Builder builder = RequestConfig.custom();
IClientConfig config = configOverride != null ? configOverride : this.config; IClientConfig config = configOverride != null ? configOverride : this.config;
builder.setConnectTimeout(config.get( builder.setConnectTimeout(
CommonClientConfigKey.ConnectTimeout, this.connectTimeout)); config.get(CommonClientConfigKey.ConnectTimeout, this.connectTimeout));
builder.setSocketTimeout(config.get( builder.setSocketTimeout(
CommonClientConfigKey.ReadTimeout, this.readTimeout)); config.get(CommonClientConfigKey.ReadTimeout, this.readTimeout));
builder.setRedirectsEnabled(config.get( builder.setRedirectsEnabled(
CommonClientConfigKey.FollowRedirects, this.followRedirects)); config.get(CommonClientConfigKey.FollowRedirects, this.followRedirects));
final RequestConfig requestConfig = builder.build(); final RequestConfig requestConfig = builder.build();
if (isSecure(configOverride)) { if (isSecure(configOverride)) {
...@@ -86,13 +89,15 @@ public class RibbonLoadBalancingHttpClient extends ...@@ -86,13 +89,15 @@ public class RibbonLoadBalancingHttpClient extends
@Override @Override
public URI reconstructURIWithServer(Server server, URI original) { 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); return super.reconstructURIWithServer(server, uri);
} }
@Override @Override
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(RibbonApacheHttpRequest request, IClientConfig requestConfig) { public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
return new RequestSpecificRetryHandler(false, false, RibbonApacheHttpRequest request, IClientConfig requestConfig) {
RetryHandler.DEFAULT, requestConfig); return new RequestSpecificRetryHandler(false, false, RetryHandler.DEFAULT,
requestConfig);
} }
} }
...@@ -63,7 +63,7 @@ import org.springframework.context.annotation.Import; ...@@ -63,7 +63,7 @@ import org.springframework.context.annotation.Import;
@Import({ RibbonCommandFactoryConfiguration.RestClientRibbonConfiguration.class, @Import({ RibbonCommandFactoryConfiguration.RestClientRibbonConfiguration.class,
RibbonCommandFactoryConfiguration.OkHttpRibbonConfiguration.class, RibbonCommandFactoryConfiguration.OkHttpRibbonConfiguration.class,
RibbonCommandFactoryConfiguration.HttpClientRibbonConfiguration.class, RibbonCommandFactoryConfiguration.HttpClientRibbonConfiguration.class,
HttpClientConfiguration.class}) HttpClientConfiguration.class })
@ConditionalOnBean(ZuulProxyMarkerConfiguration.Marker.class) @ConditionalOnBean(ZuulProxyMarkerConfiguration.Marker.class)
public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration { public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
...@@ -79,37 +79,42 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration { ...@@ -79,37 +79,42 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
@Override @Override
public HasFeatures zuulFeature() { public HasFeatures zuulFeature() {
return HasFeatures.namedFeature("Zuul (Discovery)", ZuulProxyAutoConfiguration.class); return HasFeatures.namedFeature("Zuul (Discovery)",
ZuulProxyAutoConfiguration.class);
} }
@Bean @Bean
@ConditionalOnMissingBean(DiscoveryClientRouteLocator.class) @ConditionalOnMissingBean(DiscoveryClientRouteLocator.class)
public DiscoveryClientRouteLocator discoveryRouteLocator() { public DiscoveryClientRouteLocator discoveryRouteLocator() {
return new DiscoveryClientRouteLocator(this.server.getServletPrefix(), this.discovery, this.zuulProperties, return new DiscoveryClientRouteLocator(this.server.getServletPrefix(),
this.serviceRouteMapper); this.discovery, this.zuulProperties, this.serviceRouteMapper);
} }
// pre filters // pre filters
@Bean @Bean
public PreDecorationFilter preDecorationFilter(RouteLocator routeLocator, ProxyRequestHelper proxyRequestHelper) { public PreDecorationFilter preDecorationFilter(RouteLocator routeLocator,
return new PreDecorationFilter(routeLocator, this.server.getServletPrefix(), this.zuulProperties, ProxyRequestHelper proxyRequestHelper) {
proxyRequestHelper); return new PreDecorationFilter(routeLocator, this.server.getServletPrefix(),
this.zuulProperties, proxyRequestHelper);
} }
// route filters // route filters
@Bean @Bean
public RibbonRoutingFilter ribbonRoutingFilter(ProxyRequestHelper helper, public RibbonRoutingFilter ribbonRoutingFilter(ProxyRequestHelper helper,
RibbonCommandFactory<?> ribbonCommandFactory) { RibbonCommandFactory<?> ribbonCommandFactory) {
RibbonRoutingFilter filter = new RibbonRoutingFilter(helper, ribbonCommandFactory, this.requestCustomizers); RibbonRoutingFilter filter = new RibbonRoutingFilter(helper, ribbonCommandFactory,
this.requestCustomizers);
return filter; return filter;
} }
@Bean @Bean
@ConditionalOnMissingBean(SimpleHostRoutingFilter.class) @ConditionalOnMissingBean(SimpleHostRoutingFilter.class)
public SimpleHostRoutingFilter simpleHostRoutingFilter(ProxyRequestHelper helper, ZuulProperties zuulProperties, public SimpleHostRoutingFilter simpleHostRoutingFilter(ProxyRequestHelper helper,
ApacheHttpClientConnectionManagerFactory connectionManagerFactory, ZuulProperties zuulProperties,
ApacheHttpClientFactory httpClientFactory) { ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
return new SimpleHostRoutingFilter(helper, zuulProperties, connectionManagerFactory, httpClientFactory); ApacheHttpClientFactory httpClientFactory) {
return new SimpleHostRoutingFilter(helper, zuulProperties,
connectionManagerFactory, httpClientFactory);
} }
@Bean @Bean
...@@ -150,7 +155,8 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration { ...@@ -150,7 +155,8 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
} }
@Bean @Bean
public RoutesMvcEndpoint zuulMvcEndpoint(RouteLocator routeLocator, RoutesEndpoint endpoint) { public RoutesMvcEndpoint zuulMvcEndpoint(RouteLocator routeLocator,
RoutesEndpoint endpoint) {
return new RoutesMvcEndpoint(endpoint, routeLocator); return new RoutesMvcEndpoint(endpoint, routeLocator);
} }
...@@ -166,7 +172,8 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration { ...@@ -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(); private HeartbeatMonitor monitor = new HeartbeatMonitor();
......
...@@ -67,8 +67,8 @@ import static org.springframework.cloud.netflix.zuul.filters.support.FilterConst ...@@ -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; 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}. * Route {@link ZuulFilter} that sends requests to predetermined URLs via apache
* URLs are found in {@link RequestContext#getRouteHost()}. * {@link HttpClient}. URLs are found in {@link RequestContext#getRouteHost()}.
* *
* @author Spencer Gibb * @author Spencer Gibb
* @author Dave Syer * @author Dave Syer
...@@ -114,8 +114,8 @@ public class SimpleHostRoutingFilter extends ZuulFilter { ...@@ -114,8 +114,8 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
} }
public SimpleHostRoutingFilter(ProxyRequestHelper helper, ZuulProperties properties, public SimpleHostRoutingFilter(ProxyRequestHelper helper, ZuulProperties properties,
ApacheHttpClientConnectionManagerFactory connectionManagerFactory, ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
ApacheHttpClientFactory httpClientFactory) { ApacheHttpClientFactory httpClientFactory) {
this.helper = helper; this.helper = helper;
this.hostProperties = properties.getHost(); this.hostProperties = properties.getHost();
this.sslHostnameValidationEnabled = properties.isSslHostnameValidationEnabled(); this.sslHostnameValidationEnabled = properties.isSslHostnameValidationEnabled();
...@@ -127,9 +127,12 @@ public class SimpleHostRoutingFilter extends ZuulFilter { ...@@ -127,9 +127,12 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
@PostConstruct @PostConstruct
private void initialize() { private void initialize() {
this.connectionManager = connectionManagerFactory.newConnectionManager(this.sslHostnameValidationEnabled, this.connectionManager = connectionManagerFactory.newConnectionManager(
this.hostProperties.getMaxTotalConnections(), this.hostProperties.getMaxPerRouteConnections(), this.sslHostnameValidationEnabled,
this.hostProperties.getTimeToLive(), this.hostProperties.getTimeUnit(), null); this.hostProperties.getMaxTotalConnections(),
this.hostProperties.getMaxPerRouteConnections(),
this.hostProperties.getTimeToLive(), this.hostProperties.getTimeUnit(),
null);
this.httpClient = newClient(); this.httpClient = newClient();
this.connectionManagerTimer.schedule(new TimerTask() { this.connectionManagerTimer.schedule(new TimerTask() {
@Override @Override
...@@ -220,9 +223,11 @@ public class SimpleHostRoutingFilter extends ZuulFilter { ...@@ -220,9 +223,11 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
contentType = ContentType.parse(request.getContentType()); 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 { try {
log.debug(httpHost.getHostName() + " " + httpHost.getPort() + " " log.debug(httpHost.getHostName() + " " + httpHost.getPort() + " "
+ httpHost.getSchemeName()); + httpHost.getSchemeName());
...@@ -248,30 +253,30 @@ public class SimpleHostRoutingFilter extends ZuulFilter { ...@@ -248,30 +253,30 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
? getEncodedQueryString(request) : this.helper.getQueryString(params)); ? getEncodedQueryString(request) : this.helper.getQueryString(params));
switch (verb.toUpperCase()) { switch (verb.toUpperCase()) {
case "POST": case "POST":
HttpPost httpPost = new HttpPost(uriWithQueryString); HttpPost httpPost = new HttpPost(uriWithQueryString);
httpRequest = httpPost; httpRequest = httpPost;
httpPost.setEntity(entity); httpPost.setEntity(entity);
break; break;
case "PUT": case "PUT":
HttpPut httpPut = new HttpPut(uriWithQueryString); HttpPut httpPut = new HttpPut(uriWithQueryString);
httpRequest = httpPut; httpRequest = httpPut;
httpPut.setEntity(entity); httpPut.setEntity(entity);
break; break;
case "PATCH": case "PATCH":
HttpPatch httpPatch = new HttpPatch(uriWithQueryString); HttpPatch httpPatch = new HttpPatch(uriWithQueryString);
httpRequest = httpPatch; httpRequest = httpPatch;
httpPatch.setEntity(entity); httpPatch.setEntity(entity);
break; break;
case "DELETE": case "DELETE":
BasicHttpEntityEnclosingRequest entityRequest = new BasicHttpEntityEnclosingRequest( BasicHttpEntityEnclosingRequest entityRequest = new BasicHttpEntityEnclosingRequest(
verb, uriWithQueryString); verb, uriWithQueryString);
httpRequest = entityRequest; httpRequest = entityRequest;
entityRequest.setEntity(entity); entityRequest.setEntity(entity);
break; break;
default: default:
httpRequest = new BasicHttpRequest(verb, uriWithQueryString); httpRequest = new BasicHttpRequest(verb, uriWithQueryString);
log.debug(uriWithQueryString); log.debug(uriWithQueryString);
} }
httpRequest.setHeaders(convertHeaders(headers)); httpRequest.setHeaders(convertHeaders(headers));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment