Skip to content

Commit 0023ae6

Browse files
author
Amit Joshi
committed
Integrate with latest ribbon release (ribbon-loadbalancer)
1 parent 710191f commit 0023ae6

2 files changed

Lines changed: 35 additions & 33 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ project(':feign-ribbon') {
120120

121121
dependencies {
122122
compile project(':feign-core')
123-
compile 'com.netflix.ribbon:ribbon-core:0.2.4'
123+
compile 'com.netflix.ribbon:ribbon-loadbalancer:2.0-RC5'
124124
testCompile 'org.testng:testng:6.8.5'
125125
testCompile 'com.google.mockwebserver:mockwebserver:20130706'
126126
}

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

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
import com.netflix.client.ClientException;
2020
import com.netflix.client.ClientRequest;
2121
import com.netflix.client.IResponse;
22+
import com.netflix.client.RequestSpecificRetryHandler;
2223
import com.netflix.client.config.CommonClientConfigKey;
2324
import com.netflix.client.config.IClientConfig;
2425
import com.netflix.loadbalancer.ILoadBalancer;
25-
import com.netflix.util.Pair;
2626

2727
import java.io.IOException;
2828
import java.net.URI;
@@ -35,48 +35,47 @@
3535
import feign.Response;
3636
import feign.RetryableException;
3737

38-
import static com.netflix.client.config.CommonClientConfigKey.ConnectTimeout;
39-
import static com.netflix.client.config.CommonClientConfigKey.ReadTimeout;
40-
4138
class LBClient extends AbstractLoadBalancerAwareClient<LBClient.RibbonRequest, LBClient.RibbonResponse> {
4239

4340
private final Client delegate;
4441
private final int connectTimeout;
4542
private final int readTimeout;
4643

4744
LBClient(Client delegate, ILoadBalancer lb, IClientConfig clientConfig) {
45+
super(lb, clientConfig);
4846
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);
47+
connectTimeout = clientConfig.get(CommonClientConfigKey.ConnectTimeout);
48+
readTimeout = clientConfig.get(CommonClientConfigKey.ReadTimeout);
5349
}
5450

5551
@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);
52+
public RibbonResponse execute(RibbonRequest request, IClientConfig configOverride) throws IOException {
53+
Request.Options options;
54+
if (configOverride != null) {
55+
options = new Request.Options(configOverride.get(CommonClientConfigKey.ConnectTimeout, connectTimeout),
56+
(configOverride.get(CommonClientConfigKey.ReadTimeout, readTimeout)));
57+
} else {
58+
options = new Request.Options(connectTimeout, readTimeout);
59+
}
6160
Response response = delegate.execute(request.toRequest(), options);
6261
return new RibbonResponse(request.getUri(), response);
6362
}
6463

65-
@Override protected boolean isCircuitBreakerException(Exception e) {
66-
return e instanceof IOException;
67-
}
68-
69-
@Override protected boolean isRetriableException(Exception e) {
70-
return e instanceof RetryableException;
71-
}
72-
7364
@Override
74-
protected Pair<String, Integer> deriveSchemeAndPortFromPartialUri(RibbonRequest task) {
75-
return new Pair<String, Integer>(URI.create(task.request.url()).getScheme(), task.getUri().getPort());
76-
}
77-
78-
@Override protected int getDefaultPort() {
79-
return 443;
65+
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
66+
RibbonRequest request, IClientConfig requestConfig) {
67+
68+
return new RequestSpecificRetryHandler(true, false) {
69+
@Override
70+
public boolean isRetriableException(Throwable e, boolean sameServer) {
71+
return e instanceof RetryableException;
72+
}
73+
74+
@Override
75+
public boolean isCircuitTrippingException(Throwable e) {
76+
return e instanceof IOException;
77+
}
78+
};
8079
}
8180

8281
static class RibbonRequest extends ClientRequest implements Cloneable {
@@ -135,11 +134,14 @@ static class RibbonResponse implements IResponse {
135134
Response toResponse() {
136135
return response;
137136
}
138-
}
139137

140-
static int config(RibbonRequest request, CommonClientConfigKey key, int defaultValue) {
141-
if (request.getOverrideConfig() != null && request.getOverrideConfig().containsProperty(key))
142-
return Integer.valueOf(request.getOverrideConfig().getProperty(key).toString());
143-
return defaultValue;
138+
@Override
139+
public void close() throws IOException {
140+
if (response != null && response.body() != null) {
141+
response.body().close();
142+
}
143+
}
144+
144145
}
146+
145147
}

0 commit comments

Comments
 (0)