From 7929dfec0f1db34cc91785e9d8f4690f2cd143d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lagraulet?= Date: Tue, 2 Aug 2016 13:39:04 +0200 Subject: [PATCH] Add a zuul property to customize Hystrix ExecutionIsolationStrategy --- .../netflix/zuul/ZuulProxyConfiguration.java | 18 +++++++-- .../netflix/zuul/filters/ZuulProperties.java | 19 ++++++++++ .../route/RestClientRibbonCommand.java | 15 ++++---- .../route/RestClientRibbonCommandFactory.java | 16 +++++--- .../route/apache/HttpClientRibbonCommand.java | 7 +++- .../HttpClientRibbonCommandFactory.java | 5 ++- .../route/okhttp/OkHttpRibbonCommand.java | 7 +++- .../okhttp/OkHttpRibbonCommandFactory.java | 5 ++- .../route/support/AbstractRibbonCommand.java | 38 +++++++++++-------- .../route/RestClientRibbonCommandTests.java | 13 ++++++- ...tpClientRibbonCommandIntegrationTests.java | 3 +- .../OkHttpRibbonCommandIntegrationTests.java | 3 +- ...stClientRibbonCommandIntegrationTests.java | 4 +- 13 files changed, 110 insertions(+), 43 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java index 4ac23b6d..8b8b8c90 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java @@ -86,20 +86,28 @@ public class ZuulProxyConfiguration extends ZuulConfiguration { @Configuration @ConditionalOnProperty(name = "zuul.ribbon.httpclient.enabled", matchIfMissing = true) protected static class HttpClientRibbonConfiguration { + + @Autowired + protected ZuulProperties zuulProperties; + @Bean @ConditionalOnMissingBean public RibbonCommandFactory ribbonCommandFactory(SpringClientFactory clientFactory) { - return new HttpClientRibbonCommandFactory(clientFactory); + return new HttpClientRibbonCommandFactory(clientFactory, zuulProperties); } } @Configuration @ConditionalOnProperty("zuul.ribbon.restclient.enabled") protected static class RestClientRibbonConfiguration { + + @Autowired + protected ZuulProperties zuulProperties; + @Bean @ConditionalOnMissingBean public RibbonCommandFactory ribbonCommandFactory(SpringClientFactory clientFactory) { - return new RestClientRibbonCommandFactory(clientFactory); + return new RestClientRibbonCommandFactory(clientFactory, zuulProperties); } } @@ -107,10 +115,14 @@ public class ZuulProxyConfiguration extends ZuulConfiguration { @ConditionalOnProperty("zuul.ribbon.okhttp.enabled") @ConditionalOnClass(name = "okhttp3.OkHttpClient") protected static class OkHttpRibbonConfiguration { + + @Autowired + protected ZuulProperties zuulProperties; + @Bean @ConditionalOnMissingBean public RibbonCommandFactory ribbonCommandFactory(SpringClientFactory clientFactory) { - return new OkHttpRibbonCommandFactory(clientFactory); + return new OkHttpRibbonCommandFactory(clientFactory, zuulProperties); } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/ZuulProperties.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/ZuulProperties.java index debf0d10..d6f68fb3 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/ZuulProperties.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/ZuulProperties.java @@ -31,10 +31,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; +import com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy; + import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import static com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE; + /** * @author Spencer Gibb * @author Dave Syer @@ -131,6 +135,10 @@ public class ZuulProperties { */ private boolean sslHostnameValidationEnabled =true; + private ExecutionIsolationStrategy ribbonIsolationStrategy = SEMAPHORE; + + private HystrixSemaphore semaphore = new HystrixSemaphore(); + public Set getIgnoredHeaders() { Set ignoredHeaders = new LinkedHashSet<>(this.ignoredHeaders); if (ClassUtils.isPresent( @@ -298,6 +306,17 @@ public class ZuulProperties { */ 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() { String path = this.servletPath; diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java index 2631a3b2..5c1c7ff6 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java @@ -23,6 +23,7 @@ import java.io.InputStream; import java.net.URI; 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.util.MultiValueMap; @@ -33,9 +34,7 @@ import com.netflix.niws.client.http.RestClient; /** * Hystrix wrapper around Eureka Ribbon command * - * see original - * https://github.com/Netflix/zuul/blob/master/zuul-netflix/src/main/java/com/ - * netflix/zuul/dependency/ribbon/hystrix/RibbonCommand.java + * see original */ @SuppressWarnings("deprecation") public class RestClientRibbonCommand extends AbstractRibbonCommand { @@ -44,12 +43,14 @@ public class RestClientRibbonCommand extends AbstractRibbonCommand headers, - MultiValueMap params, InputStream requestEntity) { - this(commandKey, restClient, new RibbonCommandContext(commandKey, verb.verb(), uri, retryable, headers, params, requestEntity)); + MultiValueMap params, InputStream 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) { - super(commandKey, client, context); + public RestClientRibbonCommand(String commandKey, RestClient client, RibbonCommandContext context, ZuulProperties zuulProperties) { + super(commandKey, client, context, zuulProperties); } @Override diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandFactory.java index f5ab494e..9f8718f2 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandFactory.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandFactory.java @@ -17,28 +17,32 @@ 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.zuul.filters.ZuulProperties; +import com.netflix.client.http.HttpRequest; import com.netflix.niws.client.http.RestClient; +import lombok.RequiredArgsConstructor; + /** * @author Spencer Gibb */ -public class RestClientRibbonCommandFactory implements RibbonCommandFactory { +@RequiredArgsConstructor +public class RestClientRibbonCommandFactory + implements RibbonCommandFactory { private final SpringClientFactory clientFactory; - public RestClientRibbonCommandFactory(SpringClientFactory clientFactory) { - this.clientFactory = clientFactory; - } + private final ZuulProperties zuulProperties; @Override @SuppressWarnings("deprecation") public RestClientRibbonCommand create(RibbonCommandContext context) { RestClient restClient = this.clientFactory.getClient(context.getServiceId(), RestClient.class); - return new RestClientRibbonCommand(context.getServiceId(), restClient, context); + return new RestClientRibbonCommand(context.getServiceId(), restClient, context, + this.zuulProperties); } public SpringClientFactory getClientFactory() { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommand.java index e9d17d9c..5061fb1f 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommand.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommand.java @@ -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.RibbonApacheHttpResponse; 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.support.AbstractRibbonCommand; @@ -29,8 +30,10 @@ import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibb public class HttpClientRibbonCommand extends AbstractRibbonCommand { public HttpClientRibbonCommand(final String commandKey, - final RibbonLoadBalancingHttpClient client, RibbonCommandContext context) { - super(commandKey, client, context); + final RibbonLoadBalancingHttpClient client, + final RibbonCommandContext context, + final ZuulProperties zuulProperties) { + super(commandKey, client, context, zuulProperties); } @Override diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandFactory.java index 1f3063a6..ec9be369 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandFactory.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandFactory.java @@ -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.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.RibbonCommandFactory; @@ -31,6 +32,8 @@ public class HttpClientRibbonCommandFactory implements RibbonCommandFactory { private final SpringClientFactory clientFactory; + + private final ZuulProperties zuulProperties; @Override public HttpClientRibbonCommand create(final RibbonCommandContext context) { @@ -39,7 +42,7 @@ public class HttpClientRibbonCommandFactory implements serviceId, RibbonLoadBalancingHttpClient.class); client.setLoadBalancer(this.clientFactory.getLoadBalancer(serviceId)); - return new HttpClientRibbonCommand(serviceId, client, context); + return new HttpClientRibbonCommand(serviceId, client, context, zuulProperties); } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommand.java index 9709ae16..f66f36b7 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommand.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommand.java @@ -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.OkHttpRibbonRequest; 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.support.AbstractRibbonCommand; @@ -29,8 +30,10 @@ import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibb public class OkHttpRibbonCommand extends AbstractRibbonCommand { public OkHttpRibbonCommand(final String commandKey, - final OkHttpLoadBalancingClient client, RibbonCommandContext context) { - super(commandKey, client, context); + final OkHttpLoadBalancingClient client, + final RibbonCommandContext context, + final ZuulProperties zuulProperties) { + super(commandKey, client, context, zuulProperties); } @Override diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandFactory.java index fc65e683..61001443 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandFactory.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandFactory.java @@ -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.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.RibbonCommandFactory; @@ -31,6 +32,8 @@ public class OkHttpRibbonCommandFactory implements RibbonCommandFactory { private final SpringClientFactory clientFactory; + + private final ZuulProperties zuulProperties; @Override public OkHttpRibbonCommand create(final RibbonCommandContext context) { @@ -39,7 +42,7 @@ public class OkHttpRibbonCommandFactory implements serviceId, OkHttpLoadBalancingClient.class); client.setLoadBalancer(this.clientFactory.getLoadBalancer(serviceId)); - return new OkHttpRibbonCommand(serviceId, client, context); + return new OkHttpRibbonCommand(serviceId, client, context, zuulProperties); } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/support/AbstractRibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/support/AbstractRibbonCommand.java index 04261c79..25fc0dfa 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/support/AbstractRibbonCommand.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/support/AbstractRibbonCommand.java @@ -18,6 +18,7 @@ package org.springframework.cloud.netflix.zuul.filters.route.support; 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.RibbonCommandContext; import org.springframework.http.client.ClientHttpResponse; @@ -32,39 +33,46 @@ import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.HystrixCommandGroupKey; import com.netflix.hystrix.HystrixCommandKey; import com.netflix.hystrix.HystrixCommandProperties; +import com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy; import com.netflix.zuul.constants.ZuulConstants; import com.netflix.zuul.context.RequestContext; /** * @author Spencer Gibb */ -public abstract class AbstractRibbonCommand, RQ extends ClientRequest, RS extends HttpResponse> extends HystrixCommand implements - RibbonCommand { +public abstract class AbstractRibbonCommand, RQ extends ClientRequest, RS extends HttpResponse> + extends HystrixCommand implements RibbonCommand { protected final LBC client; protected RibbonCommandContext context; - public AbstractRibbonCommand(LBC client, RibbonCommandContext context) { - this("default", client, context); + public AbstractRibbonCommand(LBC client, RibbonCommandContext context, ZuulProperties zuulProperties) { + 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.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 - final String name = ZuulConstants.ZUUL_EUREKA + commandKey + ".semaphore.maxSemaphores"; - final DynamicIntProperty value = DynamicPropertyFactory.getInstance() - .getIntProperty(name, 100); - final HystrixCommandProperties.Setter setter = HystrixCommandProperties .Setter() - .withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE) - .withExecutionIsolationSemaphoreMaxConcurrentRequests(value.get()); + final HystrixCommandProperties.Setter setter = HystrixCommandProperties.Setter() + .withExecutionIsolationStrategy(zuulProperties.getRibbonIsolationStrategy()); + if (zuulProperties.getRibbonIsolationStrategy() == ExecutionIsolationStrategy.SEMAPHORE){ + 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() + .getIntProperty(name, 100); + setter.withExecutionIsolationSemaphoreMaxConcurrentRequests(value.get()); + } else { + // FIXME Find out which parameters can be set here + } + return Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("RibbonCommand")) .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey + "RibbonCommand")) .andCommandPropertiesDefaults(setter); diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandTests.java index f8d43345..244c5d5b 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandTests.java @@ -29,8 +29,10 @@ import java.net.URI; import java.nio.charset.Charset; import java.util.Collections; +import org.junit.Before; import org.junit.Test; 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.StreamUtils; @@ -41,6 +43,13 @@ import com.netflix.client.http.HttpRequest; */ public class RestClientRibbonCommandTests { + private ZuulProperties zuulProperties; + + @Before + public void setUp() { + zuulProperties = new ZuulProperties(); + } + @Test public void testNullEntity() throws Exception { String uri = "http://example.com"; @@ -49,7 +58,7 @@ public class RestClientRibbonCommandTests { LinkedMultiValueMap params = new LinkedMultiValueMap<>(); params.add("myparam", "myparamval"); RestClientRibbonCommand command = new RestClientRibbonCommand("cmd", null, new RibbonCommandContext("example", "GET", uri, false, - headers, params, null)); + headers, params, null), zuulProperties); HttpRequest request = command.createRequest(); @@ -96,7 +105,7 @@ public class RestClientRibbonCommandTests { uri.toString(), false, headers, new LinkedMultiValueMap(), requestEntity, Collections.singletonList(requestCustomizer)); context.setContentLength(length); - RestClientRibbonCommand command = new RestClientRibbonCommand("cmd", null, context); + RestClientRibbonCommand command = new RestClientRibbonCommand("cmd", null, context, zuulProperties); HttpRequest request = command.createRequest(); diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandIntegrationTests.java index 483294c1..3f8adc31 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandIntegrationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandIntegrationTests.java @@ -37,6 +37,7 @@ import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.netflix.ribbon.StaticServerList; import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient; 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.support.ZuulProxyTestBase; import org.springframework.context.annotation.Bean; @@ -178,7 +179,7 @@ public class HttpClientRibbonCommandIntegrationTests extends ZuulProxyTestBase { @Bean public RibbonCommandFactory ribbonCommandFactory( final SpringClientFactory clientFactory) { - return new HttpClientRibbonCommandFactory(clientFactory); + return new HttpClientRibbonCommandFactory(clientFactory, new ZuulProperties()); } @Bean diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandIntegrationTests.java index 725f7327..8ca9aff0 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandIntegrationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandIntegrationTests.java @@ -32,6 +32,7 @@ import org.springframework.cloud.netflix.ribbon.RibbonClient; import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; 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.support.ZuulProxyTestBase; import org.springframework.context.annotation.Bean; @@ -109,7 +110,7 @@ public class OkHttpRibbonCommandIntegrationTests extends ZuulProxyTestBase { @Bean public RibbonCommandFactory ribbonCommandFactory( final SpringClientFactory clientFactory) { - return new OkHttpRibbonCommandFactory(clientFactory); + return new OkHttpRibbonCommandFactory(clientFactory, new ZuulProperties()); } @Bean diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandIntegrationTests.java index db862e19..fcef65b9 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandIntegrationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandIntegrationTests.java @@ -307,7 +307,7 @@ public class RestClientRibbonCommandIntegrationTests extends ZuulProxyTestBase { private SpringClientFactory clientFactory; public MyRibbonCommandFactory(SpringClientFactory clientFactory) { - super(clientFactory); + super(clientFactory, new ZuulProperties()); this.clientFactory = clientFactory; } @@ -333,7 +333,7 @@ public class RestClientRibbonCommandIntegrationTests extends ZuulProxyTestBase { public MyCommand(int errorCode, String commandKey, RestClient restClient, RibbonCommandContext context) { - super(commandKey, restClient, context); + super(commandKey, restClient, context, new ZuulProperties()); this.errorCode = errorCode; }