타임아웃설정 (1)

스프링 RestTemplate 타임아웃 설정을 하는데 타임아웃 시간이 설정한대로 적용되지 않는 듯 하여 테스트 해봄..

보통 HttpComponentsClientHttpRequestFactory 와 SimpleClientHttpRequestFactory 를 사용하여 설정을 함

스프링의 RestTemplate 기본적으로 SimpleClientHttpRequestFactory를 사용함

SimpleClientHttpRequestFactory를 이용해서 설정을 하면 정상적으로 세팅한 값에 타임아웃이 발생함.

하지만 HttpComponentsClientHttpRequestFactory 를 이용하면 설정한 시간보다 4배 긴 시간이 흐른 뒤에야 타임아웃이 발생하였음

@Test
public void 타임아웃_테스트() {

HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout((int) TimeUnit.SECONDS.toMillis(10));
factory.setConnectTimeout((int) TimeUnit.SECONDS.toMillis(5)); // 4배의 시간이 걸린 뒤에야 타임아웃 발생
factory.setConnectionRequestTimeout(5 * 1000);

// SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
// factory.setReadTimeout((int) TimeUnit.SECONDS.toMillis(10));
// factory.setConnectTimeout((int) TimeUnit.SECONDS.toMillis(5)); // 세팅한 시간대로 타임아웃 발생

// RequestConfig config = RequestConfig.custom()
// .setSocketTimeout((int) TimeUnit.SECONDS.toMillis(1))
// .setConnectTimeout((int) TimeUnit.SECONDS.toMillis(5))
// .setConnectionRequestTimeout((int) TimeUnit.SECONDS.toMillis(10))
// .build();
// CloseableHttpClient client = HttpClientBuilder
// .create()
// .setDefaultRequestConfig(config)
// .build();
// HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(client);

RestTemplate restTemplate = new RestTemplate(factory);

// 1. connect timeout 테스트
long start = System.currentTimeMillis();
try {
ResponseEntity<String> result = restTemplate.getForEntity("https://abc.com:81/test", String.class);
} catch (ResourceAccessException e) {
log.error("타임아웃!! {}", TimeUtils.printDuration(System.currentTimeMillis() - start), e);
}

}


아직 원인은 확인하지 못함.