Browse Source

Merge pull request #119 from allenxwang/6.x-ribbon

Fix the compatibility issue of feign-ribbon module with ribbon 2
6.x 6.1.3
Allen Wang 10 years ago
parent
commit
ca94c83ea2
  1. 11
      build.gradle
  2. 4
      example-github/build.gradle
  3. 4
      example-wikipedia/build.gradle
  4. 71
      ribbon/src/main/java/feign/ribbon/LBClient.java

11
build.gradle

@ -10,6 +10,11 @@ buildscript { @@ -10,6 +10,11 @@ buildscript {
}
allprojects {
if (JavaVersion.current().isJava8Compatible()) {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet') // Doclint is onerous in Java 8.
}
}
repositories {
mavenLocal()
mavenCentral()
@ -19,7 +24,9 @@ allprojects { @@ -19,7 +24,9 @@ allprojects {
apply from: file('gradle/convention.gradle')
apply from: file('gradle/maven.gradle')
apply from: file('gradle/check.gradle')
if (!JavaVersion.current().isJava8Compatible()) {
apply from: file('gradle/check.gradle') // FindBugs is incompatible with Java 8.
}
apply from: file('gradle/license.gradle')
apply from: file('gradle/release.gradle')
apply plugin: 'idea'
@ -113,7 +120,7 @@ project(':feign-ribbon') { @@ -113,7 +120,7 @@ project(':feign-ribbon') {
dependencies {
compile project(':feign-core')
compile 'com.netflix.ribbon:ribbon-core:0.3.1'
compile 'com.netflix.ribbon:ribbon-loadbalancer:2.0-RC5'
testCompile 'org.testng:testng:6.8.5'
testCompile 'com.google.mockwebserver:mockwebserver:20130706'
}

4
example-github/build.gradle

@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
apply plugin: 'java'
dependencies {
compile 'com.netflix.feign:feign-core:6.1.1'
compile 'com.netflix.feign:feign-gson:6.1.1'
compile project(':feign-core')
compile project(':feign-gson')
provided 'com.squareup.dagger:dagger-compiler:1.1.0'
}

4
example-wikipedia/build.gradle

@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
apply plugin: 'java'
dependencies {
compile 'com.netflix.feign:feign-core:6.1.1'
compile 'com.netflix.feign:feign-gson:6.1.1'
compile project(':feign-core')
compile project(':feign-gson')
provided 'com.squareup.dagger:dagger-compiler:1.1.0'
}

71
ribbon/src/main/java/feign/ribbon/LBClient.java

@ -19,60 +19,61 @@ import com.netflix.client.AbstractLoadBalancerAwareClient; @@ -19,60 +19,61 @@ import com.netflix.client.AbstractLoadBalancerAwareClient;
import com.netflix.client.ClientException;
import com.netflix.client.ClientRequest;
import com.netflix.client.IResponse;
import com.netflix.client.RequestSpecificRetryHandler;
import com.netflix.client.RetryHandler;
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;
import java.util.Collection;
import java.util.Map;
import feign.Client;
import feign.Request;
import feign.RequestTemplate;
import feign.Response;
import feign.RetryableException;
import static com.netflix.client.config.CommonClientConfigKey.ConnectTimeout;
import static com.netflix.client.config.CommonClientConfigKey.ReadTimeout;
import java.io.IOException;
import java.net.URI;
import java.util.Collection;
import java.util.Map;
class LBClient extends AbstractLoadBalancerAwareClient<LBClient.RibbonRequest, LBClient.RibbonResponse> {
private final Client delegate;
private final int connectTimeout;
private final int readTimeout;
private final IClientConfig clientConfig;
LBClient(Client delegate, ILoadBalancer lb, IClientConfig clientConfig) {
super(lb, clientConfig);
this.setRetryHandler(RetryHandler.DEFAULT);
this.clientConfig = clientConfig;
this.delegate = delegate;
this.connectTimeout = Integer.valueOf(clientConfig.getProperty(ConnectTimeout).toString());
this.readTimeout = Integer.valueOf(clientConfig.getProperty(ReadTimeout).toString());
setLoadBalancer(lb);
initWithNiwsConfig(clientConfig);
connectTimeout = clientConfig.get(CommonClientConfigKey.ConnectTimeout);
readTimeout = clientConfig.get(CommonClientConfigKey.ReadTimeout);
}
@Override
public RibbonResponse execute(RibbonRequest request) throws IOException {
int connectTimeout = config(request, ConnectTimeout, this.connectTimeout);
int readTimeout = config(request, ReadTimeout, this.readTimeout);
Request.Options options = new Request.Options(connectTimeout, readTimeout);
public RibbonResponse execute(RibbonRequest request, IClientConfig configOverride) throws IOException {
Request.Options options;
if (configOverride != null) {
options = new Request.Options(configOverride.get(CommonClientConfigKey.ConnectTimeout, connectTimeout),
(configOverride.get(CommonClientConfigKey.ReadTimeout, readTimeout)));
} else {
options = new Request.Options(connectTimeout, readTimeout);
}
Response response = delegate.execute(request.toRequest(), options);
return new RibbonResponse(request.getUri(), response);
}
@Override protected boolean isCircuitBreakerException(Throwable e) {
return e instanceof IOException;
}
@Override protected boolean isRetriableException(Throwable e) {
return e instanceof RetryableException;
}
@Override
protected Pair<String, Integer> deriveSchemeAndPortFromPartialUri(RibbonRequest task) {
return new Pair<String, Integer>(URI.create(task.request.url()).getScheme(), task.getUri().getPort());
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
RibbonRequest request, IClientConfig requestConfig) {
if (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);
}
}
static class RibbonRequest extends ClientRequest implements Cloneable {
@ -134,15 +135,11 @@ class LBClient extends AbstractLoadBalancerAwareClient<LBClient.RibbonRequest, L @@ -134,15 +135,11 @@ class LBClient extends AbstractLoadBalancerAwareClient<LBClient.RibbonRequest, L
@Override
public void close() throws IOException {
if (response.body() != null) {
response.body().close();
}
if (response != null && response.body() != null) {
response.body().close();
}
}
}
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;
}
}

Loading…
Cancel
Save