diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/NeverRetry.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/NeverRetry.java new file mode 100644 index 000000000..72753c713 --- /dev/null +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/NeverRetry.java @@ -0,0 +1,23 @@ +package org.springframework.cloud.sleuth.instrument.web.client.feign; + +import feign.RetryableException; +import feign.Retryer; + +/** + * This is essentially the same implementation of a Retryer that is in newer versions of + * Feign. For the 1.0.x stream we add it here. + * @author Ryan Baxter + */ +public class NeverRetry implements Retryer { + @Override + public void continueOrPropagate(RetryableException e) { + throw e; + } + + @Override + public Retryer clone() { + return this; + } + + public static final NeverRetry INSTANCE = new NeverRetry(); +} diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilder.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilder.java index b8486118e..6b34ab0c4 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilder.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilder.java @@ -16,9 +16,8 @@ package org.springframework.cloud.sleuth.instrument.web.client.feign; -import org.springframework.beans.factory.BeanFactory; - import feign.Feign; +import org.springframework.beans.factory.BeanFactory; /** * Contains {@link feign.Feign.Builder} implementation with tracing components @@ -33,7 +32,7 @@ final class SleuthFeignBuilder { private SleuthFeignBuilder() {} static Feign.Builder builder(BeanFactory beanFactory) { - return Feign.builder() + return Feign.builder().retryer(NeverRetry.INSTANCE) .client(new TraceFeignClient(beanFactory)); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthHystrixFeignBuilder.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthHystrixFeignBuilder.java index 8b69adae8..69096e0f2 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthHystrixFeignBuilder.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthHystrixFeignBuilder.java @@ -16,10 +16,9 @@ package org.springframework.cloud.sleuth.instrument.web.client.feign; -import org.springframework.beans.factory.BeanFactory; - import feign.Feign; import feign.hystrix.HystrixFeign; +import org.springframework.beans.factory.BeanFactory; /** * Contains {@link Feign.Builder} implementation that delegates execution @@ -35,7 +34,7 @@ final class SleuthHystrixFeignBuilder { private SleuthHystrixFeignBuilder() {} static Feign.Builder builder(BeanFactory beanFactory) { - return HystrixFeign.builder() + return HystrixFeign.builder().retryer(NeverRetry.INSTANCE) .client(new TraceFeignClient(beanFactory)); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTracer.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTracer.java index 0f2e6d847..f9dc325b8 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTracer.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTracer.java @@ -166,7 +166,8 @@ public class DefaultTracer implements Tracer { .traceIdHigh(parent.getTraceIdHigh()) .traceId(parent.getTraceId()).parent(parent.getSpanId()).spanId(id) .processId(parent.getProcessId()).savedSpan(parent) - .exportable(parent.isExportable()).build(); + .exportable(parent.isExportable()) + .build(); this.spanLogger.logStartedSpan(parent, span); return span; }