Programming Language/Java & Scala

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

AndersonChoi 2019. 6. 28. 13:29

개요

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();
}
반응형