RequestConfig vs ConnectionConfig
설정 예시 코드
@Bean
public RestClient restClient() {
return RestClient.builder()
.requestFactory(clientHttpRequestFactory())
.baseUrl(host)
.defaultHeader("Accept", "application/json")
.build();
}
@Bean
public ClientHttpRequestFactory clientHttpRequestFactory() {
final ConnectionConfig cc = ConnectionConfig.custom()
//연결 타임아웃
.setConnectTimeout(Timeout.ofMilliseconds(1500))
.build();
final RequestConfig rc = RequestConfig.custom()
//풀에서 커넥션 대기 타임아웃
.setConnectionRequestTimeout(Timeout.ofMilliseconds(1500))
//읽기 타임아웃
.setResponseTimeout(Timeout.ofMilliseconds(2000))
.build();
final PoolingHttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
//맥스 커넥션 수
.setMaxConnTotal(50)
//특정 API에서 사용할 수 있는 최대 커넥션 수
.setMaxConnPerRoute(40)
.setDefaultConnectionConfig(cc)
.build();
final CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.setDefaultRequestConfig(rc)
.evictExpiredConnections()
.evictIdleConnections(Timeout.ofMilliseconds(20))
.build();
return new HttpComponentsClientHttpRequestFactory(httpClient);
}
역할: 커넥션 풀(재사용되는 TCP 커넥션)을 관리한다.
요청마다 새로 TCP 연결을 맺지 않고, 기존 연결을 꺼내 써서 성능/부하를 줄인다.