Skip to content

Commit 182d965

Browse files
mkm1997mmishra8
andauthored
Integrating Configurable max-in-memory-size for webclient (#36)
* Adding Customization over response size. * optimizing webclient builder. --------- Co-authored-by: mmishra8 <[email protected]>
1 parent 253bb87 commit 182d965

File tree

4 files changed

+52
-6
lines changed

4 files changed

+52
-6
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
<groupId>com.intuit.rwebpulse</groupId>
55
<artifactId>rwebpulse</artifactId>
6-
<version>1.0.1</version>
6+
<version>1.0.2</version>
77
<packaging>jar</packaging>
88
<name>Spring Web Client</name>
99
<url>https://github.com/intuit/rwebpulse</url>

src/main/java/com/intuit/springwebclient/config/SpringWebClientConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@
1010
public class SpringWebClientConfig {
1111
private HttpConnectionPoolConfig connectionPool;
1212
private HttpClientConfig httpClientConfig;
13+
private int maxInMemorySize;
1314
}

src/main/java/com/intuit/springwebclient/config/WebClientConfiguration.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.springframework.context.annotation.Configuration;
1010

1111
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
12+
import org.springframework.web.reactive.function.client.ExchangeStrategies;
1213
import org.springframework.web.reactive.function.client.WebClient;
1314
import reactor.netty.http.client.HttpClient;
1415
import reactor.netty.resources.ConnectionProvider;
@@ -24,6 +25,7 @@ public class WebClientConfiguration {
2425
private final SpringWebClientConfig webClientConfiguration;
2526
private final WebClientRequestFilter webClientRequestFilter;
2627

28+
2729
@Bean
2830
public ConnectionProvider webClientConnectionProvider(){
2931
return ConnectionProvider.builder(WebClientConstants.CONNECTION_PROVIDER_NAME)
@@ -42,10 +44,20 @@ public HttpClient webHttpClient(){
4244
}
4345

4446
@Bean("RWebPulseClient")
45-
public WebClient createWebClient(){
46-
return WebClient.builder()
47-
.clientConnector(new ReactorClientHttpConnector(webHttpClient()))
48-
.filter(webClientRequestFilter.getFilter())
49-
.build();
47+
public WebClient createWebClient() {
48+
49+
WebClient.Builder builder = WebClient.builder();
50+
builder.clientConnector(new ReactorClientHttpConnector(webHttpClient()))
51+
.filter(webClientRequestFilter.getFilter());
52+
//if max-in-memory-size is not set in config then the building client with default size else creating client with custom max-in-memory-size
53+
if (webClientConfiguration.getMaxInMemorySize() > 0) {
54+
builder.exchangeStrategies(
55+
ExchangeStrategies.builder()
56+
.codecs(configurer -> configurer
57+
.defaultCodecs()
58+
.maxInMemorySize(webClientConfiguration.getMaxInMemorySize()))
59+
.build());
60+
}
61+
return builder.build();
5062
}
5163
}

src/test/java/com/intuit/springwebclient/config/WebClientConfigurationTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class WebClientConfigurationTest {
2121
@Mock
2222
private WebClientRequestFilter webClientRequestFilter;
2323

24+
2425
@InjectMocks
2526
private WebClientConfiguration webClientConfiguration;
2627

@@ -44,6 +45,38 @@ public void testWebClientConnectionProvider() {
4445

4546
Mockito.when(springWebClientConfig.getHttpClientConfig()).thenReturn(httpClientConfig);
4647

48+
Mockito.when(springWebClientConfig.getMaxInMemorySize()).thenReturn(100);
49+
50+
Mockito.when(webClientRequestFilter.getFilter()).thenReturn(new ExchangeFilterFunction() {
51+
@Override
52+
public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) {
53+
return null;
54+
}
55+
});
56+
57+
WebClient webClient = webClientConfiguration.createWebClient();
58+
59+
}
60+
61+
@Test
62+
public void testWebClientConnectionProvider_withoutMaxSize() {
63+
HttpConnectionPoolConfig poolConfig = new HttpConnectionPoolConfig();
64+
poolConfig.setMaxConnections(200);
65+
poolConfig.setMaxIdleTime(2000L);
66+
poolConfig.setMaxLifeTime(3500L);
67+
poolConfig.setPendingAcquireTimeout(1500L);
68+
69+
Mockito.when(springWebClientConfig.getConnectionPool()).thenReturn(poolConfig);
70+
71+
ConnectionProvider connectionProvider = webClientConfiguration.webClientConnectionProvider();
72+
Assertions.assertEquals(200, connectionProvider.maxConnections());
73+
74+
HttpClientConfig httpClientConfig = new HttpClientConfig();
75+
httpClientConfig.setConnectTimeoutMillis(5000);
76+
httpClientConfig.setConnectTimeoutMillis(3000);
77+
78+
79+
Mockito.when(springWebClientConfig.getHttpClientConfig()).thenReturn(httpClientConfig);
4780
Mockito.when(webClientRequestFilter.getFilter()).thenReturn(new ExchangeFilterFunction() {
4881
@Override
4982
public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) {

0 commit comments

Comments
 (0)