diff --git a/build.gradle b/build.gradle index 9e11a60276..f0ee4bedef 100644 --- a/build.gradle +++ b/build.gradle @@ -120,7 +120,7 @@ project(':feign-ribbon') { dependencies { compile project(':feign-core') - compile 'com.netflix.ribbon:ribbon-core:0.2.4' + compile 'com.netflix.ribbon:ribbon-loadbalancer:2.0-RC5' testCompile 'org.testng:testng:6.8.5' testCompile 'com.google.mockwebserver:mockwebserver:20130706' } diff --git a/ribbon/src/main/java/feign/ribbon/LBClient.java b/ribbon/src/main/java/feign/ribbon/LBClient.java index a6d79205a2..078b8083fc 100644 --- a/ribbon/src/main/java/feign/ribbon/LBClient.java +++ b/ribbon/src/main/java/feign/ribbon/LBClient.java @@ -19,10 +19,10 @@ import com.netflix.client.ClientException; import com.netflix.client.ClientRequest; import com.netflix.client.IResponse; +import com.netflix.client.RequestSpecificRetryHandler; import com.netflix.client.config.CommonClientConfigKey; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.ILoadBalancer; -import com.netflix.util.Pair; import java.io.IOException; import java.net.URI; @@ -35,9 +35,6 @@ import feign.Response; import feign.RetryableException; -import static com.netflix.client.config.CommonClientConfigKey.ConnectTimeout; -import static com.netflix.client.config.CommonClientConfigKey.ReadTimeout; - class LBClient extends AbstractLoadBalancerAwareClient { private final Client delegate; @@ -45,38 +42,40 @@ class LBClient extends AbstractLoadBalancerAwareClient deriveSchemeAndPortFromPartialUri(RibbonRequest task) { - return new Pair(URI.create(task.request.url()).getScheme(), task.getUri().getPort()); - } - - @Override protected int getDefaultPort() { - return 443; + public RequestSpecificRetryHandler getRequestSpecificRetryHandler( + RibbonRequest request, IClientConfig requestConfig) { + + return new RequestSpecificRetryHandler(true, false) { + @Override + public boolean isRetriableException(Throwable e, boolean sameServer) { + return e instanceof RetryableException; + } + + @Override + public boolean isCircuitTrippingException(Throwable e) { + return e instanceof IOException; + } + }; } static class RibbonRequest extends ClientRequest implements Cloneable { @@ -135,11 +134,14 @@ static class RibbonResponse implements IResponse { Response toResponse() { return response; } - } - static int config(RibbonRequest request, CommonClientConfigKey key, int defaultValue) { - if (request.getOverrideConfig() != null && request.getOverrideConfig().containsProperty(key)) - return Integer.valueOf(request.getOverrideConfig().getProperty(key).toString()); - return defaultValue; + @Override + public void close() throws IOException { + if (response != null && response.body() != null) { + response.body().close(); + } + } + } + }