Skip to content

Commit ca94c83

Browse files
author
Allen Wang
committed
Merge pull request OpenFeign#119 from allenxwang/6.x-ribbon
Fix the compatibility issue of feign-ribbon module with ribbon 2
2 parents c55602e + 4064d51 commit ca94c83

File tree

4 files changed

+47
-43
lines changed

4 files changed

+47
-43
lines changed

build.gradle

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ buildscript {
1010
}
1111

1212
allprojects {
13+
if (JavaVersion.current().isJava8Compatible()) {
14+
tasks.withType(Javadoc) {
15+
options.addStringOption('Xdoclint:none', '-quiet') // Doclint is onerous in Java 8.
16+
}
17+
}
1318
repositories {
1419
mavenLocal()
1520
mavenCentral()
@@ -19,7 +24,9 @@ allprojects {
1924

2025
apply from: file('gradle/convention.gradle')
2126
apply from: file('gradle/maven.gradle')
22-
apply from: file('gradle/check.gradle')
27+
if (!JavaVersion.current().isJava8Compatible()) {
28+
apply from: file('gradle/check.gradle') // FindBugs is incompatible with Java 8.
29+
}
2330
apply from: file('gradle/license.gradle')
2431
apply from: file('gradle/release.gradle')
2532
apply plugin: 'idea'
@@ -113,7 +120,7 @@ project(':feign-ribbon') {
113120

114121
dependencies {
115122
compile project(':feign-core')
116-
compile 'com.netflix.ribbon:ribbon-core:0.3.1'
123+
compile 'com.netflix.ribbon:ribbon-loadbalancer:2.0-RC5'
117124
testCompile 'org.testng:testng:6.8.5'
118125
testCompile 'com.google.mockwebserver:mockwebserver:20130706'
119126
}

example-github/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
apply plugin: 'java'
22

33
dependencies {
4-
compile 'com.netflix.feign:feign-core:6.1.1'
5-
compile 'com.netflix.feign:feign-gson:6.1.1'
4+
compile project(':feign-core')
5+
compile project(':feign-gson')
66
provided 'com.squareup.dagger:dagger-compiler:1.1.0'
77
}
88

example-wikipedia/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
apply plugin: 'java'
22

33
dependencies {
4-
compile 'com.netflix.feign:feign-core:6.1.1'
5-
compile 'com.netflix.feign:feign-gson:6.1.1'
4+
compile project(':feign-core')
5+
compile project(':feign-gson')
66
provided 'com.squareup.dagger:dagger-compiler:1.1.0'
77
}
88

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

Lines changed: 34 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,60 +19,61 @@
1919
import com.netflix.client.ClientException;
2020
import com.netflix.client.ClientRequest;
2121
import com.netflix.client.IResponse;
22+
import com.netflix.client.RequestSpecificRetryHandler;
23+
import com.netflix.client.RetryHandler;
2224
import com.netflix.client.config.CommonClientConfigKey;
2325
import com.netflix.client.config.IClientConfig;
2426
import com.netflix.loadbalancer.ILoadBalancer;
25-
import com.netflix.util.Pair;
26-
27-
import java.io.IOException;
28-
import java.net.URI;
29-
import java.util.Collection;
30-
import java.util.Map;
31-
3227
import feign.Client;
3328
import feign.Request;
3429
import feign.RequestTemplate;
3530
import feign.Response;
36-
import feign.RetryableException;
3731

38-
import static com.netflix.client.config.CommonClientConfigKey.ConnectTimeout;
39-
import static com.netflix.client.config.CommonClientConfigKey.ReadTimeout;
32+
import java.io.IOException;
33+
import java.net.URI;
34+
import java.util.Collection;
35+
import java.util.Map;
4036

4137
class LBClient extends AbstractLoadBalancerAwareClient<LBClient.RibbonRequest, LBClient.RibbonResponse> {
4238

4339
private final Client delegate;
4440
private final int connectTimeout;
4541
private final int readTimeout;
42+
private final IClientConfig clientConfig;
4643

4744
LBClient(Client delegate, ILoadBalancer lb, IClientConfig clientConfig) {
45+
super(lb, clientConfig);
46+
this.setRetryHandler(RetryHandler.DEFAULT);
47+
this.clientConfig = clientConfig;
4848
this.delegate = delegate;
49-
this.connectTimeout = Integer.valueOf(clientConfig.getProperty(ConnectTimeout).toString());
50-
this.readTimeout = Integer.valueOf(clientConfig.getProperty(ReadTimeout).toString());
51-
setLoadBalancer(lb);
52-
initWithNiwsConfig(clientConfig);
49+
connectTimeout = clientConfig.get(CommonClientConfigKey.ConnectTimeout);
50+
readTimeout = clientConfig.get(CommonClientConfigKey.ReadTimeout);
5351
}
5452

5553
@Override
56-
public RibbonResponse execute(RibbonRequest request) throws IOException {
57-
int connectTimeout = config(request, ConnectTimeout, this.connectTimeout);
58-
int readTimeout = config(request, ReadTimeout, this.readTimeout);
59-
60-
Request.Options options = new Request.Options(connectTimeout, readTimeout);
54+
public RibbonResponse execute(RibbonRequest request, IClientConfig configOverride) throws IOException {
55+
Request.Options options;
56+
if (configOverride != null) {
57+
options = new Request.Options(configOverride.get(CommonClientConfigKey.ConnectTimeout, connectTimeout),
58+
(configOverride.get(CommonClientConfigKey.ReadTimeout, readTimeout)));
59+
} else {
60+
options = new Request.Options(connectTimeout, readTimeout);
61+
}
6162
Response response = delegate.execute(request.toRequest(), options);
6263
return new RibbonResponse(request.getUri(), response);
6364
}
6465

65-
@Override protected boolean isCircuitBreakerException(Throwable e) {
66-
return e instanceof IOException;
67-
}
68-
69-
@Override protected boolean isRetriableException(Throwable e) {
70-
return e instanceof RetryableException;
71-
}
72-
7366
@Override
74-
protected Pair<String, Integer> deriveSchemeAndPortFromPartialUri(RibbonRequest task) {
75-
return new Pair<String, Integer>(URI.create(task.request.url()).getScheme(), task.getUri().getPort());
67+
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
68+
RibbonRequest request, IClientConfig requestConfig) {
69+
if (clientConfig.get(CommonClientConfigKey.OkToRetryOnAllOperations, false)) {
70+
return new RequestSpecificRetryHandler(true, true, this.getRetryHandler(), requestConfig);
71+
}
72+
if (!request.toRequest().method().equals("GET")) {
73+
return new RequestSpecificRetryHandler(true, false, this.getRetryHandler(), requestConfig);
74+
} else {
75+
return new RequestSpecificRetryHandler(true, true, this.getRetryHandler(), requestConfig);
76+
}
7677
}
7778

7879
static class RibbonRequest extends ClientRequest implements Cloneable {
@@ -134,15 +135,11 @@ Response toResponse() {
134135

135136
@Override
136137
public void close() throws IOException {
137-
if (response.body() != null) {
138-
response.body().close();
139-
}
138+
if (response != null && response.body() != null) {
139+
response.body().close();
140+
}
140141
}
141-
}
142142

143-
static int config(RibbonRequest request, CommonClientConfigKey key, int defaultValue) {
144-
if (request.getOverrideConfig() != null && request.getOverrideConfig().containsProperty(key))
145-
return Integer.valueOf(request.getOverrideConfig().getProperty(key).toString());
146-
return defaultValue;
147143
}
144+
148145
}

0 commit comments

Comments
 (0)