Skip to content

Commit 7c1558a

Browse files
committed
Merge pull request #178 from bstick12/ribbonclient
Changed RibbonClient to pass Feign Request.Options to LBClient
2 parents c6db67a + 59a159e commit 7c1558a

File tree

3 files changed

+50
-9
lines changed

3 files changed

+50
-9
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
* Removes support for parameters annotated with `javax.inject.@Named`. Use `feign.@Param` instead.
44
* Makes body parameter type explicit.
55

6+
### Version 7.3
7+
* Adds Request.Options support to RibbonClient
8+
69
### Version 7.2
710
* Adds `Feign.Builder.build()`
811
* Opens constructor for Gson and Jackson codecs which accepts type adapters

ribbon/src/main/java/feign/ribbon/RibbonClient.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.netflix.client.ClientException;
44
import com.netflix.client.ClientFactory;
5+
import com.netflix.client.config.CommonClientConfigKey;
6+
import com.netflix.client.config.DefaultClientConfigImpl;
57
import com.netflix.client.config.IClientConfig;
68
import com.netflix.loadbalancer.ILoadBalancer;
79

@@ -45,7 +47,8 @@ public Response execute(Request request, Request.Options options) throws IOExcep
4547
LBClient.RibbonRequest
4648
ribbonRequest =
4749
new LBClient.RibbonRequest(request, uriWithoutSchemeAndPort);
48-
return lbClient(clientName).executeWithLoadBalancer(ribbonRequest).toResponse();
50+
return lbClient(clientName).executeWithLoadBalancer(ribbonRequest,
51+
new FeignOptionsClientConfig(options)).toResponse();
4952
} catch (ClientException e) {
5053
if (e.getCause() instanceof IOException) {
5154
throw IOException.class.cast(e.getCause());
@@ -59,4 +62,24 @@ private LBClient lbClient(String clientName) {
5962
ILoadBalancer lb = ClientFactory.getNamedLoadBalancer(clientName);
6063
return new LBClient(delegate, lb, config);
6164
}
65+
66+
static class FeignOptionsClientConfig extends DefaultClientConfigImpl {
67+
68+
public FeignOptionsClientConfig(Request.Options options) {
69+
setProperty(CommonClientConfigKey.ConnectTimeout, options.connectTimeoutMillis());
70+
setProperty(CommonClientConfigKey.ReadTimeout, options.readTimeoutMillis());
71+
}
72+
73+
@Override
74+
public void loadProperties(String clientName) {
75+
76+
}
77+
78+
@Override
79+
public void loadDefaultValues() {
80+
81+
}
82+
83+
}
84+
6285
}

ribbon/src/test/java/feign/ribbon/RibbonClientTest.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,30 @@
1515
*/
1616
package feign.ribbon;
1717

18-
import com.squareup.okhttp.mockwebserver.MockResponse;
19-
import com.squareup.okhttp.mockwebserver.SocketPolicy;
20-
import com.squareup.okhttp.mockwebserver.rule.MockWebServerRule;
18+
import static com.netflix.config.ConfigurationManager.getConfigInstance;
19+
import static org.hamcrest.core.IsEqual.equalTo;
20+
import static org.junit.Assert.assertEquals;
21+
import static org.junit.Assert.assertThat;
22+
23+
import java.io.IOException;
24+
import java.net.URL;
2125

2226
import org.junit.After;
2327
import org.junit.Rule;
2428
import org.junit.Test;
2529
import org.junit.rules.TestName;
2630

27-
import java.io.IOException;
28-
import java.net.URL;
31+
import com.netflix.client.config.CommonClientConfigKey;
32+
import com.netflix.client.config.IClientConfig;
33+
import com.squareup.okhttp.mockwebserver.MockResponse;
34+
import com.squareup.okhttp.mockwebserver.SocketPolicy;
35+
import com.squareup.okhttp.mockwebserver.rule.MockWebServerRule;
2936

3037
import feign.Feign;
3138
import feign.Param;
39+
import feign.Request;
3240
import feign.RequestLine;
3341

34-
import static com.netflix.config.ConfigurationManager.getConfigInstance;
35-
import static org.junit.Assert.assertEquals;
36-
3742
public class RibbonClientTest {
3843

3944
@Rule
@@ -135,6 +140,16 @@ public void ioExceptionRetryWithBuilder() throws IOException, InterruptedExcepti
135140
// TODO: verify ribbon stats match
136141
// assertEquals(target.lb().getLoadBalancerStats().getSingleServerStat())
137142
}
143+
144+
@Test
145+
public void testFeignOptionsClientConfig() {
146+
Request.Options options = new Request.Options(1111, 22222);
147+
IClientConfig config = new RibbonClient.FeignOptionsClientConfig(options);
148+
assertThat(config.get(CommonClientConfigKey.ConnectTimeout),
149+
equalTo(options.connectTimeoutMillis()));
150+
assertThat(config.get(CommonClientConfigKey.ReadTimeout), equalTo(options.readTimeoutMillis()));
151+
assertEquals(2, config.getProperties().size());
152+
}
138153

139154
private String client() {
140155
return testName.getMethodName();

0 commit comments

Comments
 (0)