Commit 7929dfec by Stéphane Lagraulet

Add a zuul property to customize Hystrix ExecutionIsolationStrategy

parent 8b911e60
...@@ -86,20 +86,28 @@ public class ZuulProxyConfiguration extends ZuulConfiguration { ...@@ -86,20 +86,28 @@ public class ZuulProxyConfiguration extends ZuulConfiguration {
@Configuration @Configuration
@ConditionalOnProperty(name = "zuul.ribbon.httpclient.enabled", matchIfMissing = true) @ConditionalOnProperty(name = "zuul.ribbon.httpclient.enabled", matchIfMissing = true)
protected static class HttpClientRibbonConfiguration { protected static class HttpClientRibbonConfiguration {
@Autowired
protected ZuulProperties zuulProperties;
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public RibbonCommandFactory<?> ribbonCommandFactory(SpringClientFactory clientFactory) { public RibbonCommandFactory<?> ribbonCommandFactory(SpringClientFactory clientFactory) {
return new HttpClientRibbonCommandFactory(clientFactory); return new HttpClientRibbonCommandFactory(clientFactory, zuulProperties);
} }
} }
@Configuration @Configuration
@ConditionalOnProperty("zuul.ribbon.restclient.enabled") @ConditionalOnProperty("zuul.ribbon.restclient.enabled")
protected static class RestClientRibbonConfiguration { protected static class RestClientRibbonConfiguration {
@Autowired
protected ZuulProperties zuulProperties;
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public RibbonCommandFactory<?> ribbonCommandFactory(SpringClientFactory clientFactory) { public RibbonCommandFactory<?> ribbonCommandFactory(SpringClientFactory clientFactory) {
return new RestClientRibbonCommandFactory(clientFactory); return new RestClientRibbonCommandFactory(clientFactory, zuulProperties);
} }
} }
...@@ -107,10 +115,14 @@ public class ZuulProxyConfiguration extends ZuulConfiguration { ...@@ -107,10 +115,14 @@ public class ZuulProxyConfiguration extends ZuulConfiguration {
@ConditionalOnProperty("zuul.ribbon.okhttp.enabled") @ConditionalOnProperty("zuul.ribbon.okhttp.enabled")
@ConditionalOnClass(name = "okhttp3.OkHttpClient") @ConditionalOnClass(name = "okhttp3.OkHttpClient")
protected static class OkHttpRibbonConfiguration { protected static class OkHttpRibbonConfiguration {
@Autowired
protected ZuulProperties zuulProperties;
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public RibbonCommandFactory<?> ribbonCommandFactory(SpringClientFactory clientFactory) { public RibbonCommandFactory<?> ribbonCommandFactory(SpringClientFactory clientFactory) {
return new OkHttpRibbonCommandFactory(clientFactory); return new OkHttpRibbonCommandFactory(clientFactory, zuulProperties);
} }
} }
......
...@@ -31,10 +31,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties; ...@@ -31,10 +31,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.util.ClassUtils; import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import static com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE;
/** /**
* @author Spencer Gibb * @author Spencer Gibb
* @author Dave Syer * @author Dave Syer
...@@ -131,6 +135,10 @@ public class ZuulProperties { ...@@ -131,6 +135,10 @@ public class ZuulProperties {
*/ */
private boolean sslHostnameValidationEnabled =true; private boolean sslHostnameValidationEnabled =true;
private ExecutionIsolationStrategy ribbonIsolationStrategy = SEMAPHORE;
private HystrixSemaphore semaphore = new HystrixSemaphore();
public Set<String> getIgnoredHeaders() { public Set<String> getIgnoredHeaders() {
Set<String> ignoredHeaders = new LinkedHashSet<>(this.ignoredHeaders); Set<String> ignoredHeaders = new LinkedHashSet<>(this.ignoredHeaders);
if (ClassUtils.isPresent( if (ClassUtils.isPresent(
...@@ -299,6 +307,17 @@ public class ZuulProperties { ...@@ -299,6 +307,17 @@ public class ZuulProperties {
private int maxPerRouteConnections = 20; private int maxPerRouteConnections = 20;
} }
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class HystrixSemaphore {
/**
* The maximum number of total semaphores for Hystrix.
*/
private int maxSemaphores = 100;
}
public String getServletPattern() { public String getServletPattern() {
String path = this.servletPath; String path = this.servletPath;
if (!path.startsWith("/")) { if (!path.startsWith("/")) {
......
...@@ -23,6 +23,7 @@ import java.io.InputStream; ...@@ -23,6 +23,7 @@ import java.io.InputStream;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand; import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
...@@ -33,9 +34,7 @@ import com.netflix.niws.client.http.RestClient; ...@@ -33,9 +34,7 @@ import com.netflix.niws.client.http.RestClient;
/** /**
* Hystrix wrapper around Eureka Ribbon command * Hystrix wrapper around Eureka Ribbon command
* *
* see original * see <a href="https://github.com/Netflix/zuul/blob/master/zuul-netflix/src/main/java/com/netflix/zuul/dependency/ribbon/hystrix/RibbonCommand.java">original</a>
* https://github.com/Netflix/zuul/blob/master/zuul-netflix/src/main/java/com/
* netflix/zuul/dependency/ribbon/hystrix/RibbonCommand.java
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class RestClientRibbonCommand extends AbstractRibbonCommand<RestClient, HttpRequest, HttpResponse> { public class RestClientRibbonCommand extends AbstractRibbonCommand<RestClient, HttpRequest, HttpResponse> {
...@@ -44,12 +43,14 @@ public class RestClientRibbonCommand extends AbstractRibbonCommand<RestClient, H ...@@ -44,12 +43,14 @@ public class RestClientRibbonCommand extends AbstractRibbonCommand<RestClient, H
@Deprecated @Deprecated
public RestClientRibbonCommand(String commandKey, RestClient restClient, HttpRequest.Verb verb, String uri, public RestClientRibbonCommand(String commandKey, RestClient restClient, HttpRequest.Verb verb, String uri,
Boolean retryable, MultiValueMap<String, String> headers, Boolean retryable, MultiValueMap<String, String> headers,
MultiValueMap<String, String> params, InputStream requestEntity) { MultiValueMap<String, String> params, InputStream requestEntity,
this(commandKey, restClient, new RibbonCommandContext(commandKey, verb.verb(), uri, retryable, headers, params, requestEntity)); ZuulProperties zuulProperties) {
this(commandKey, restClient,
new RibbonCommandContext(commandKey, verb.verb(), uri, retryable, headers, params, requestEntity), zuulProperties);
} }
public RestClientRibbonCommand(String commandKey, RestClient client, RibbonCommandContext context) { public RestClientRibbonCommand(String commandKey, RestClient client, RibbonCommandContext context, ZuulProperties zuulProperties) {
super(commandKey, client, context); super(commandKey, client, context, zuulProperties);
} }
@Override @Override
......
...@@ -17,28 +17,32 @@ ...@@ -17,28 +17,32 @@
package org.springframework.cloud.netflix.zuul.filters.route; package org.springframework.cloud.netflix.zuul.filters.route;
import com.netflix.client.http.HttpRequest;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import com.netflix.client.http.HttpRequest;
import com.netflix.niws.client.http.RestClient; import com.netflix.niws.client.http.RestClient;
import lombok.RequiredArgsConstructor;
/** /**
* @author Spencer Gibb * @author Spencer Gibb
*/ */
public class RestClientRibbonCommandFactory implements RibbonCommandFactory<RestClientRibbonCommand> { @RequiredArgsConstructor
public class RestClientRibbonCommandFactory
implements RibbonCommandFactory<RestClientRibbonCommand> {
private final SpringClientFactory clientFactory; private final SpringClientFactory clientFactory;
public RestClientRibbonCommandFactory(SpringClientFactory clientFactory) { private final ZuulProperties zuulProperties;
this.clientFactory = clientFactory;
}
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public RestClientRibbonCommand create(RibbonCommandContext context) { public RestClientRibbonCommand create(RibbonCommandContext context) {
RestClient restClient = this.clientFactory.getClient(context.getServiceId(), RestClient restClient = this.clientFactory.getClient(context.getServiceId(),
RestClient.class); RestClient.class);
return new RestClientRibbonCommand(context.getServiceId(), restClient, context); return new RestClientRibbonCommand(context.getServiceId(), restClient, context,
this.zuulProperties);
} }
public SpringClientFactory getClientFactory() { public SpringClientFactory getClientFactory() {
......
...@@ -20,6 +20,7 @@ package org.springframework.cloud.netflix.zuul.filters.route.apache; ...@@ -20,6 +20,7 @@ package org.springframework.cloud.netflix.zuul.filters.route.apache;
import org.springframework.cloud.netflix.ribbon.apache.RibbonApacheHttpRequest; import org.springframework.cloud.netflix.ribbon.apache.RibbonApacheHttpRequest;
import org.springframework.cloud.netflix.ribbon.apache.RibbonApacheHttpResponse; import org.springframework.cloud.netflix.ribbon.apache.RibbonApacheHttpResponse;
import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient; import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext;
import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand; import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand;
...@@ -29,8 +30,10 @@ import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibb ...@@ -29,8 +30,10 @@ import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibb
public class HttpClientRibbonCommand extends AbstractRibbonCommand<RibbonLoadBalancingHttpClient, RibbonApacheHttpRequest, RibbonApacheHttpResponse> { public class HttpClientRibbonCommand extends AbstractRibbonCommand<RibbonLoadBalancingHttpClient, RibbonApacheHttpRequest, RibbonApacheHttpResponse> {
public HttpClientRibbonCommand(final String commandKey, public HttpClientRibbonCommand(final String commandKey,
final RibbonLoadBalancingHttpClient client, RibbonCommandContext context) { final RibbonLoadBalancingHttpClient client,
super(commandKey, client, context); final RibbonCommandContext context,
final ZuulProperties zuulProperties) {
super(commandKey, client, context, zuulProperties);
} }
@Override @Override
......
...@@ -18,6 +18,7 @@ package org.springframework.cloud.netflix.zuul.filters.route.apache; ...@@ -18,6 +18,7 @@ package org.springframework.cloud.netflix.zuul.filters.route.apache;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient; import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory;
...@@ -32,6 +33,8 @@ public class HttpClientRibbonCommandFactory implements ...@@ -32,6 +33,8 @@ public class HttpClientRibbonCommandFactory implements
private final SpringClientFactory clientFactory; private final SpringClientFactory clientFactory;
private final ZuulProperties zuulProperties;
@Override @Override
public HttpClientRibbonCommand create(final RibbonCommandContext context) { public HttpClientRibbonCommand create(final RibbonCommandContext context) {
final String serviceId = context.getServiceId(); final String serviceId = context.getServiceId();
...@@ -39,7 +42,7 @@ public class HttpClientRibbonCommandFactory implements ...@@ -39,7 +42,7 @@ public class HttpClientRibbonCommandFactory implements
serviceId, RibbonLoadBalancingHttpClient.class); serviceId, RibbonLoadBalancingHttpClient.class);
client.setLoadBalancer(this.clientFactory.getLoadBalancer(serviceId)); client.setLoadBalancer(this.clientFactory.getLoadBalancer(serviceId));
return new HttpClientRibbonCommand(serviceId, client, context); return new HttpClientRibbonCommand(serviceId, client, context, zuulProperties);
} }
} }
...@@ -20,6 +20,7 @@ package org.springframework.cloud.netflix.zuul.filters.route.okhttp; ...@@ -20,6 +20,7 @@ package org.springframework.cloud.netflix.zuul.filters.route.okhttp;
import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpLoadBalancingClient; import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpLoadBalancingClient;
import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonRequest; import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonRequest;
import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonResponse; import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonResponse;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext;
import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand; import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand;
...@@ -29,8 +30,10 @@ import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibb ...@@ -29,8 +30,10 @@ import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibb
public class OkHttpRibbonCommand extends AbstractRibbonCommand<OkHttpLoadBalancingClient, OkHttpRibbonRequest, OkHttpRibbonResponse> { public class OkHttpRibbonCommand extends AbstractRibbonCommand<OkHttpLoadBalancingClient, OkHttpRibbonRequest, OkHttpRibbonResponse> {
public OkHttpRibbonCommand(final String commandKey, public OkHttpRibbonCommand(final String commandKey,
final OkHttpLoadBalancingClient client, RibbonCommandContext context) { final OkHttpLoadBalancingClient client,
super(commandKey, client, context); final RibbonCommandContext context,
final ZuulProperties zuulProperties) {
super(commandKey, client, context, zuulProperties);
} }
@Override @Override
......
...@@ -18,6 +18,7 @@ package org.springframework.cloud.netflix.zuul.filters.route.okhttp; ...@@ -18,6 +18,7 @@ package org.springframework.cloud.netflix.zuul.filters.route.okhttp;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpLoadBalancingClient; import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpLoadBalancingClient;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory;
...@@ -32,6 +33,8 @@ public class OkHttpRibbonCommandFactory implements ...@@ -32,6 +33,8 @@ public class OkHttpRibbonCommandFactory implements
private final SpringClientFactory clientFactory; private final SpringClientFactory clientFactory;
private final ZuulProperties zuulProperties;
@Override @Override
public OkHttpRibbonCommand create(final RibbonCommandContext context) { public OkHttpRibbonCommand create(final RibbonCommandContext context) {
final String serviceId = context.getServiceId(); final String serviceId = context.getServiceId();
...@@ -39,7 +42,7 @@ public class OkHttpRibbonCommandFactory implements ...@@ -39,7 +42,7 @@ public class OkHttpRibbonCommandFactory implements
serviceId, OkHttpLoadBalancingClient.class); serviceId, OkHttpLoadBalancingClient.class);
client.setLoadBalancer(this.clientFactory.getLoadBalancer(serviceId)); client.setLoadBalancer(this.clientFactory.getLoadBalancer(serviceId));
return new OkHttpRibbonCommand(serviceId, client, context); return new OkHttpRibbonCommand(serviceId, client, context, zuulProperties);
} }
} }
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
package org.springframework.cloud.netflix.zuul.filters.route.support; package org.springframework.cloud.netflix.zuul.filters.route.support;
import org.springframework.cloud.netflix.ribbon.RibbonHttpResponse; import org.springframework.cloud.netflix.ribbon.RibbonHttpResponse;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommand; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommand;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext;
import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.ClientHttpResponse;
...@@ -32,39 +33,46 @@ import com.netflix.hystrix.HystrixCommand; ...@@ -32,39 +33,46 @@ import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey; import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixCommandKey; import com.netflix.hystrix.HystrixCommandKey;
import com.netflix.hystrix.HystrixCommandProperties; import com.netflix.hystrix.HystrixCommandProperties;
import com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy;
import com.netflix.zuul.constants.ZuulConstants; import com.netflix.zuul.constants.ZuulConstants;
import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.context.RequestContext;
/** /**
* @author Spencer Gibb * @author Spencer Gibb
*/ */
public abstract class AbstractRibbonCommand<LBC extends AbstractLoadBalancerAwareClient<RQ, RS>, RQ extends ClientRequest, RS extends HttpResponse> extends HystrixCommand<ClientHttpResponse> implements public abstract class AbstractRibbonCommand<LBC extends AbstractLoadBalancerAwareClient<RQ, RS>, RQ extends ClientRequest, RS extends HttpResponse>
RibbonCommand { extends HystrixCommand<ClientHttpResponse> implements RibbonCommand {
protected final LBC client; protected final LBC client;
protected RibbonCommandContext context; protected RibbonCommandContext context;
public AbstractRibbonCommand(LBC client, RibbonCommandContext context) { public AbstractRibbonCommand(LBC client, RibbonCommandContext context, ZuulProperties zuulProperties) {
this("default", client, context); this("default", client, context, zuulProperties);
} }
public AbstractRibbonCommand(String commandKey, LBC client, RibbonCommandContext context) {
super(getSetter(commandKey)); public AbstractRibbonCommand(String commandKey, LBC client, RibbonCommandContext context, ZuulProperties zuulProperties) {
super(getSetter(commandKey, zuulProperties));
this.client = client; this.client = client;
this.context = context; this.context = context;
} }
protected static Setter getSetter(final String commandKey) { protected static Setter getSetter(final String commandKey, ZuulProperties zuulProperties) {
// we want to default to semaphore-isolation since this wraps
// 2 others commands that are already thread isolated
// @formatter:off // @formatter:off
final HystrixCommandProperties.Setter setter = HystrixCommandProperties.Setter()
.withExecutionIsolationStrategy(zuulProperties.getRibbonIsolationStrategy());
if (zuulProperties.getRibbonIsolationStrategy() == ExecutionIsolationStrategy.SEMAPHORE){
final String name = ZuulConstants.ZUUL_EUREKA + commandKey + ".semaphore.maxSemaphores"; final String name = ZuulConstants.ZUUL_EUREKA + commandKey + ".semaphore.maxSemaphores";
// we want to default to semaphore-isolation since this wraps
// 2 others commands that are already thread isolated
final DynamicIntProperty value = DynamicPropertyFactory.getInstance() final DynamicIntProperty value = DynamicPropertyFactory.getInstance()
.getIntProperty(name, 100); .getIntProperty(name, 100);
final HystrixCommandProperties.Setter setter = HystrixCommandProperties .Setter() setter.withExecutionIsolationSemaphoreMaxConcurrentRequests(value.get());
.withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE) } else {
.withExecutionIsolationSemaphoreMaxConcurrentRequests(value.get()); // FIXME Find out which parameters can be set here
}
return Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("RibbonCommand")) return Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("RibbonCommand"))
.andCommandKey(HystrixCommandKey.Factory.asKey(commandKey + "RibbonCommand")) .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey + "RibbonCommand"))
.andCommandPropertiesDefaults(setter); .andCommandPropertiesDefaults(setter);
......
...@@ -29,8 +29,10 @@ import java.net.URI; ...@@ -29,8 +29,10 @@ import java.net.URI;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Collections; import java.util.Collections;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.cloud.netflix.ribbon.support.RibbonRequestCustomizer; import org.springframework.cloud.netflix.ribbon.support.RibbonRequestCustomizer;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.StreamUtils; import org.springframework.util.StreamUtils;
...@@ -41,6 +43,13 @@ import com.netflix.client.http.HttpRequest; ...@@ -41,6 +43,13 @@ import com.netflix.client.http.HttpRequest;
*/ */
public class RestClientRibbonCommandTests { public class RestClientRibbonCommandTests {
private ZuulProperties zuulProperties;
@Before
public void setUp() {
zuulProperties = new ZuulProperties();
}
@Test @Test
public void testNullEntity() throws Exception { public void testNullEntity() throws Exception {
String uri = "http://example.com"; String uri = "http://example.com";
...@@ -49,7 +58,7 @@ public class RestClientRibbonCommandTests { ...@@ -49,7 +58,7 @@ public class RestClientRibbonCommandTests {
LinkedMultiValueMap<String, String> params = new LinkedMultiValueMap<>(); LinkedMultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("myparam", "myparamval"); params.add("myparam", "myparamval");
RestClientRibbonCommand command = new RestClientRibbonCommand("cmd", null, new RibbonCommandContext("example", "GET", uri, false, RestClientRibbonCommand command = new RestClientRibbonCommand("cmd", null, new RibbonCommandContext("example", "GET", uri, false,
headers, params, null)); headers, params, null), zuulProperties);
HttpRequest request = command.createRequest(); HttpRequest request = command.createRequest();
...@@ -96,7 +105,7 @@ public class RestClientRibbonCommandTests { ...@@ -96,7 +105,7 @@ public class RestClientRibbonCommandTests {
uri.toString(), false, headers, new LinkedMultiValueMap<String, String>(), uri.toString(), false, headers, new LinkedMultiValueMap<String, String>(),
requestEntity, Collections.singletonList(requestCustomizer)); requestEntity, Collections.singletonList(requestCustomizer));
context.setContentLength(length); context.setContentLength(length);
RestClientRibbonCommand command = new RestClientRibbonCommand("cmd", null, context); RestClientRibbonCommand command = new RestClientRibbonCommand("cmd", null, context, zuulProperties);
HttpRequest request = command.createRequest(); HttpRequest request = command.createRequest();
......
...@@ -37,6 +37,7 @@ import org.springframework.cloud.netflix.ribbon.SpringClientFactory; ...@@ -37,6 +37,7 @@ import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.netflix.ribbon.StaticServerList; import org.springframework.cloud.netflix.ribbon.StaticServerList;
import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient; import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy; import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory;
import org.springframework.cloud.netflix.zuul.filters.route.support.ZuulProxyTestBase; import org.springframework.cloud.netflix.zuul.filters.route.support.ZuulProxyTestBase;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
...@@ -178,7 +179,7 @@ public class HttpClientRibbonCommandIntegrationTests extends ZuulProxyTestBase { ...@@ -178,7 +179,7 @@ public class HttpClientRibbonCommandIntegrationTests extends ZuulProxyTestBase {
@Bean @Bean
public RibbonCommandFactory<?> ribbonCommandFactory( public RibbonCommandFactory<?> ribbonCommandFactory(
final SpringClientFactory clientFactory) { final SpringClientFactory clientFactory) {
return new HttpClientRibbonCommandFactory(clientFactory); return new HttpClientRibbonCommandFactory(clientFactory, new ZuulProperties());
} }
@Bean @Bean
......
...@@ -32,6 +32,7 @@ import org.springframework.cloud.netflix.ribbon.RibbonClient; ...@@ -32,6 +32,7 @@ import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy; import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory;
import org.springframework.cloud.netflix.zuul.filters.route.support.ZuulProxyTestBase; import org.springframework.cloud.netflix.zuul.filters.route.support.ZuulProxyTestBase;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
...@@ -109,7 +110,7 @@ public class OkHttpRibbonCommandIntegrationTests extends ZuulProxyTestBase { ...@@ -109,7 +110,7 @@ public class OkHttpRibbonCommandIntegrationTests extends ZuulProxyTestBase {
@Bean @Bean
public RibbonCommandFactory<?> ribbonCommandFactory( public RibbonCommandFactory<?> ribbonCommandFactory(
final SpringClientFactory clientFactory) { final SpringClientFactory clientFactory) {
return new OkHttpRibbonCommandFactory(clientFactory); return new OkHttpRibbonCommandFactory(clientFactory, new ZuulProperties());
} }
@Bean @Bean
......
...@@ -307,7 +307,7 @@ public class RestClientRibbonCommandIntegrationTests extends ZuulProxyTestBase { ...@@ -307,7 +307,7 @@ public class RestClientRibbonCommandIntegrationTests extends ZuulProxyTestBase {
private SpringClientFactory clientFactory; private SpringClientFactory clientFactory;
public MyRibbonCommandFactory(SpringClientFactory clientFactory) { public MyRibbonCommandFactory(SpringClientFactory clientFactory) {
super(clientFactory); super(clientFactory, new ZuulProperties());
this.clientFactory = clientFactory; this.clientFactory = clientFactory;
} }
...@@ -333,7 +333,7 @@ public class RestClientRibbonCommandIntegrationTests extends ZuulProxyTestBase { ...@@ -333,7 +333,7 @@ public class RestClientRibbonCommandIntegrationTests extends ZuulProxyTestBase {
public MyCommand(int errorCode, String commandKey, RestClient restClient, public MyCommand(int errorCode, String commandKey, RestClient restClient,
RibbonCommandContext context) { RibbonCommandContext context) {
super(commandKey, restClient, context); super(commandKey, restClient, context, new ZuulProperties());
this.errorCode = errorCode; this.errorCode = errorCode;
} }
......
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