add httpClient config parameter · PlaytikaOSS/feign-reactive@fe3d579 · GitHub
Skip to content

Commit fe3d579

Browse files
Sergii Karpenkokptfh
authored andcommitted
add httpClient config parameter
fixes #480
1 parent 846411d commit fe3d579

6 files changed

Lines changed: 51 additions & 26 deletions

File tree

‎feign-reactor-core/src/main/java/reactivefeign/utils/LinkedCaseInsensitiveMap.java‎

Lines changed: 0 additions & 2 deletions

‎feign-reactor-rx2/src/main/java/reactivefeign/rx2/Rx2ReactiveFeign.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,12 @@ protected PublisherHttpClient toPublisher(ReactiveHttpClient reactiveHttpClient,
125125

126126
@Override
127127
protected ReactiveHttpClientFactory clientFactory(){
128+
this.webClientBuilder.clientConnector(clientConnector());
129+
130+
if(webClientCustomizer != null){
131+
webClientCustomizer.accept(webClientBuilder);
132+
}
133+
128134
return methodMetadata -> webClient(methodMetadata, webClientBuilder.build());
129135
}
130136

‎feign-reactor-webclient-core/src/main/java/reactivefeign/webclient/CoreWebBuilder.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ abstract public class CoreWebBuilder<T> extends ReactiveFeign.Builder<T>{
3434
protected CoreWebBuilder(WebClient.Builder webClientBuilder) {
3535
this.webClientBuilder = webClientBuilder;
3636

37-
this.webClientBuilder.clientConnector(buildClientConnector());
3837
this.webClientBuilder.codecs(multipartCodec());
3938
}
4039

@@ -45,6 +44,8 @@ protected CoreWebBuilder(WebClient.Builder webClientBuilder, WebClientFeignCusto
4544

4645
@Override
4746
protected ReactiveHttpClientFactory clientFactory(){
47+
this.webClientBuilder.clientConnector(clientConnector());
48+
4849
if(webClientCustomizer != null){
4950
webClientCustomizer.accept(webClientBuilder);
5051
}
@@ -64,7 +65,7 @@ public ReactiveFeignBuilder<T> objectMapper(ObjectMapper objectMapper) {
6465

6566
protected abstract BiFunction<ReactiveHttpRequest, Throwable, Throwable> errorMapper();
6667

67-
protected abstract ClientHttpConnector buildClientConnector();
68+
protected abstract ClientHttpConnector clientConnector();
6869

6970
private Consumer<ClientCodecConfigurer> multipartCodec() {
7071
return clientCodecConfigurer -> clientCodecConfigurer.customCodecs().register(

‎feign-reactor-webclient-jetty/src/main/java/reactivefeign/webclient/jetty/JettyWebReactiveFeign.java‎

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ public static <T> Builder<T> builder(WebClient.Builder webClientBuilder,
5252

5353
public static class Builder<T> extends CoreWebBuilder<T> {
5454

55+
private JettyReactiveOptions reactiveOptions = JettyReactiveOptions.DEFAULT_OPTIONS;
56+
5557
protected Builder(WebClient.Builder webClientBuilder) {
5658
super(webClientBuilder);
5759
}
@@ -62,15 +64,7 @@ protected Builder(WebClient.Builder webClientBuilder, WebClientFeignCustomizer w
6264

6365
@Override
6466
public Builder<T> options(ReactiveOptions options) {
65-
webClientBuilder.clientConnector(
66-
buildJettyClientHttpConnector((JettyReactiveOptions)options));
67-
Long requestTimeoutMillis = ((JettyReactiveOptions) options).getRequestTimeoutMillis();
68-
if(requestTimeoutMillis != null){
69-
webClientBuilder.filter((request, next) -> next.exchange(
70-
ClientRequest.from(request).httpRequest(
71-
clientHttpRequest -> clientHttpRequest.<Request>getNativeRequest()
72-
.timeout(requestTimeoutMillis, TimeUnit.MILLISECONDS)).build()));
73-
}
67+
this.reactiveOptions = (JettyReactiveOptions)options;
7468
return this;
7569
}
7670

@@ -86,8 +80,17 @@ public BiFunction<ReactiveHttpRequest, Throwable, Throwable> errorMapper(){
8680
}
8781

8882
@Override
89-
protected ClientHttpConnector buildClientConnector() {
90-
return buildJettyClientHttpConnector(JettyReactiveOptions.DEFAULT_OPTIONS);
83+
protected ClientHttpConnector clientConnector() {
84+
85+
Long requestTimeoutMillis = reactiveOptions.getRequestTimeoutMillis();
86+
if(requestTimeoutMillis != null){
87+
webClientBuilder.filter((request, next) -> next.exchange(
88+
ClientRequest.from(request).httpRequest(
89+
clientHttpRequest -> clientHttpRequest.<Request>getNativeRequest()
90+
.timeout(requestTimeoutMillis, TimeUnit.MILLISECONDS)).build()));
91+
}
92+
93+
return buildJettyClientHttpConnector(reactiveOptions);
9194
}
9295

9396
}

‎feign-reactor-webclient/src/main/java/reactivefeign/webclient/NettyClientHttpConnectorBuilder.java‎

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,36 @@
1010
import org.apache.commons.logging.LogFactory;
1111
import org.springframework.http.client.reactive.ClientHttpConnector;
1212
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
13+
import reactor.netty.http.HttpResources;
1314
import reactor.netty.http.client.HttpClient;
1415
import reactor.netty.tcp.TcpClient;
16+
import reactor.netty.tcp.TcpResources;
1517
import reactor.netty.transport.ProxyProvider;
1618

1719
import javax.net.ssl.SSLException;
1820
import java.time.Duration;
1921
import java.util.Objects;
2022
import java.util.concurrent.TimeUnit;
2123

24+
import static reactor.netty.resources.LoopResources.DEFAULT_NATIVE;
25+
2226
class NettyClientHttpConnectorBuilder {
2327

2428
private static final Log LOG = LogFactory.getLog(NettyClientHttpConnectorBuilder.class);
2529

26-
public static ClientHttpConnector buildNettyClientHttpConnector(WebReactiveOptions webOptions) {
27-
TcpClient tcpClient = TcpClient.create();
30+
public static ClientHttpConnector buildNettyClientHttpConnector(HttpClient httpClient, WebReactiveOptions webOptions) {
31+
32+
if(httpClient == null){
33+
httpClient = HttpClient.create(TcpResources.get())
34+
.runOn(HttpResources.get(), DEFAULT_NATIVE);
35+
}
36+
2837
if (webOptions.getConnectTimeoutMillis() != null) {
29-
tcpClient = tcpClient.option(ChannelOption.CONNECT_TIMEOUT_MILLIS,
38+
httpClient = httpClient.option(ChannelOption.CONNECT_TIMEOUT_MILLIS,
3039
webOptions.getConnectTimeoutMillis().intValue());
3140
}
32-
tcpClient = tcpClient.doOnConnected(connection -> {
41+
42+
httpClient = httpClient.doOnConnected(connection -> {
3343
if (webOptions.getReadTimeoutMillis() != null) {
3444
connection.addHandlerLast(new ReadTimeoutHandler(
3545
webOptions.getReadTimeoutMillis(), TimeUnit.MILLISECONDS));
@@ -42,7 +52,7 @@ public static ClientHttpConnector buildNettyClientHttpConnector(WebReactiveOptio
4252

4353
WebReactiveOptions.WebProxySettings proxySettings = (WebReactiveOptions.WebProxySettings)webOptions.getProxySettings();
4454
if (proxySettings != null) {
45-
tcpClient = tcpClient.proxy(typeSpec -> {
55+
httpClient = httpClient.proxy(typeSpec -> {
4656
ProxyProvider.Builder proxyBuilder = typeSpec.type(ProxyProvider.Proxy.HTTP)
4757
.host(proxySettings.getHost())
4858
.port(proxySettings.getPort())
@@ -54,8 +64,6 @@ public static ClientHttpConnector buildNettyClientHttpConnector(WebReactiveOptio
5464
});
5565
}
5666

57-
HttpClient httpClient = HttpClient.from(tcpClient);
58-
5967
if (webOptions.getResponseTimeoutMillis() != null) {
6068
httpClient = httpClient.responseTimeout(Duration.ofMillis(webOptions.getResponseTimeoutMillis()));
6169
}

‎feign-reactor-webclient/src/main/java/reactivefeign/webclient/WebReactiveFeign.java‎

Lines changed: 13 additions & 4 deletions

0 commit comments

Comments
 (0)