From abd32fbfd017507be982000bc714c04a607cae90 Mon Sep 17 00:00:00 2001 From: hscholz Date: Thu, 10 Dec 2015 13:28:43 +0100 Subject: [PATCH] Explicitly set target to feign client name. fixes gh-703 --- .../netflix/feign/FeignClientFactoryBean.java | 16 ++++++++-------- .../netflix/feign/valid/FeignClientTests.java | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java index 0505bda1..8124201b 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java @@ -18,9 +18,6 @@ package org.springframework.cloud.netflix.feign; import java.util.Map; -import lombok.Data; -import lombok.EqualsAndHashCode; - import org.springframework.beans.BeansException; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; @@ -36,11 +33,14 @@ import feign.Logger; import feign.Request; import feign.RequestInterceptor; import feign.Retryer; +import feign.Target; +import feign.Target.HardCodedTarget; import feign.codec.Decoder; import feign.codec.Encoder; import feign.codec.ErrorDecoder; -import feign.hystrix.HystrixFeign; import feign.slf4j.Slf4jLogger; +import lombok.Data; +import lombok.EqualsAndHashCode; /** * @author Spencer Gibb @@ -120,10 +120,10 @@ class FeignClientFactoryBean implements FactoryBean, InitializingBean, A return factory.getInstance(this.name, type); } - protected T loadBalance(Feign.Builder builder, FeignClientFactory factory, Class type, String url) { + protected T loadBalance(Feign.Builder builder, FeignClientFactory factory, Target target) { Client client = getOptional(factory, Client.class); if (client != null) { - return builder.client(client).target(type, url); + return builder.client(client).target(target); } throw new IllegalStateException("No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-ribbon?"); @@ -140,12 +140,12 @@ class FeignClientFactoryBean implements FactoryBean, InitializingBean, A } else { url = this.name; } - return loadBalance(feign(factory), factory, this.type, url); + return loadBalance(feign(factory), factory, new HardCodedTarget<>(this.type, this.name, url)); } if (StringUtils.hasText(this.url) && !this.url.startsWith("http")) { this.url = "http://" + this.url; } - return feign(factory).target(this.type, this.url); + return feign(factory).target(new HardCodedTarget<>(this.type, this.name, this.url)); } @Override diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java index 4954285c..22fbe7dc 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java @@ -279,6 +279,7 @@ public class FeignClientTests { public void testHystrixCommand() { HystrixCommand> command = this.testClient.getHellosHystrix(); assertNotNull("command was null", command); + assertEquals("Hystrix command group name should match the name of the feign client", "localapp", command.getCommandGroup().name()); List hellos = command.execute(); assertNotNull("hellos was null", hellos); assertEquals("hellos didn't match", hellos, getHelloList());