From 0af99769ad199e55be625bb30b27fda0975f1ffa Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Thu, 9 Feb 2017 14:29:12 -0500 Subject: [PATCH] Adding missing commit from PR #1457 --- .../feign/FeignClientsConfiguration.java | 10 ++++++++-- .../netflix/feign/ribbon/FeignLoadBalancer.java | 17 +++-------------- .../feign/FeignClientOverrideDefaultsTests.java | 2 +- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientsConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientsConfiguration.java index 27d4866d..ce23c89e 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientsConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientsConfiguration.java @@ -104,11 +104,17 @@ public class FeignClientsConfiguration { } } + @Bean + @ConditionalOnMissingBean + public Retryer feignRetryer() { + return Retryer.NEVER_RETRY; + } + @Bean @Scope("prototype") @ConditionalOnMissingBean - public Feign.Builder feignBuilder() { - return Feign.builder().retryer(Retryer.NEVER_RETRY); + public Feign.Builder feignBuilder(Retryer retryer) { + return Feign.builder().retryer(retryer); } @Bean diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java index 7c613f7e..a8fad5f7 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java @@ -97,11 +97,13 @@ public class FeignLoadBalancer extends } LoadBalancedRetryPolicy retryPolicy = loadBalancedRetryPolicyFactory.create(this.getClientName(), this); retryTemplate.setRetryPolicy(retryPolicy == null ? new NeverRetryPolicy() - : new InterceptorRetryPolicy(request.toHttpRequest(), retryPolicy, this, this.getClientName())); + : new FeignRetryPolicy(request.toHttpRequest(), retryPolicy, this, this.getClientName())); return retryTemplate.execute(new RetryCallback() { @Override public RibbonResponse doWithRetry(RetryContext retryContext) throws IOException { Request feignRequest = null; + //on retries the policy will choose the server and set it in the context + // extract the server and update the request being made if(retryContext instanceof LoadBalancedRetryContext) { ServiceInstance service = ((LoadBalancedRetryContext)retryContext).getServiceInstance(); if(service != null) { @@ -120,19 +122,6 @@ public class FeignLoadBalancer extends @Override public RequestSpecificRetryHandler getRequestSpecificRetryHandler( RibbonRequest request, IClientConfig requestConfig) { -// if (this.clientConfig.get(CommonClientConfigKey.OkToRetryOnAllOperations, -// false)) { -// return new RequestSpecificRetryHandler(true, true, this.getRetryHandler(), -// requestConfig); -// } -// if (!request.toRequest().method().equals("GET")) { -// return new RequestSpecificRetryHandler(true, false, this.getRetryHandler(), -// requestConfig); -// } -// else { -// return new RequestSpecificRetryHandler(true, true, this.getRetryHandler(), -// requestConfig); -// } return new RequestSpecificRetryHandler(false, false, this.getRetryHandler(), requestConfig); } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/FeignClientOverrideDefaultsTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/FeignClientOverrideDefaultsTests.java index bbd84a5e..27211ed8 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/FeignClientOverrideDefaultsTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/FeignClientOverrideDefaultsTests.java @@ -108,7 +108,7 @@ public class FeignClientOverrideDefaultsTests { @Test public void overrideRetryer() { - assertNull(this.context.getInstance("foo", Retryer.class)); + assertEquals(Retryer.NEVER_RETRY, this.context.getInstance("foo", Retryer.class)); Retryer.Default.class.cast(this.context.getInstance("bar", Retryer.class)); }