본문 바로가기

Programming Language/Java & Scala

Spring boot Resttemplate 사용시 HttpComponentsClientHttpRequestFactory 옵션 설명(setConnectTimeout, setConnectionRequestTimeout, setReadTimeout)

개요

Spring boot에서 rest call을 위해 Resttemplate를 사용한다. 이때 여러 옵션(connection timout 등)을 사용하기 위해 아래와 같이 Restemplate에 RequestFactory를 주입하여 사용하는 경우가 있다. 이 경우 각 옵션이 어떤 역할을 하는지 알아보자

HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setConnectionRequestTimeout(30000);
requestFactory.setConnectTimeout(30000);
requestFactory.setReadTimeout(30000);
RestTemplate restTemplate = new RestTemplate(requestFactory);

RequestFactory methods

1) setConnectTimeout

/**
 * 대상서버와 소켓 연결을 맺을 때 timeout 시간 설정
 * 0은 무한히 기다리는 것을 뜻함
 */
public void setConnectTimeout(int timeout) {
    Assert.isTrue(timeout >= 0, "Timeout must be a non-negative value");
    this.requestConfig = requestConfigBuilder().setConnectTimeout(timeout).build();
}

2) setConnectionRequestTimeout

/**
 * ConnectionManager(커넥션풀)로부터 꺼내올 때의 timeout 시간 설정
 */
public void setConnectionRequestTimeout(int connectionRequestTimeout) {
    this.requestConfig = requestConfigBuilder()
            .setConnectionRequestTimeout(connectionRequestTimeout).build();
}

3) setReadTimeout

/**
 * http통신을 위해 소켓이 연결된 이후 request에 대한 응답이 늦어지는 경우
 */
public void setReadTimeout(int timeout) {
    Assert.isTrue(timeout >= 0, "Timeout must be a non-negative value");
    this.requestConfig = requestConfigBuilder().setSocketTimeout(timeout).build();
}