2016-06-16 2 views
6

HttpClient에 일부 시간 제한을 구성하려면 Apache RequestConfig을 사용하고 있습니다.사용자 정의 연결 관리자를 사용하지 않으면 Apache HttpClient에 ConnectionRequestTimeout을 설정해야합니까?

RequestConfig config = RequestConfig.custom() 
     .setConnectTimeout(timeout) 
     .setSocketTimeout(timeout) 
     .setConnectionRequestTimeout(timeout) // Can I leave this out.. 
     .build(); 

CloseableHttpClient httpClient = HttpClients.custom() 
     //.setConnectionManager(connectionManager) // ..if I don't use this 
     .setDefaultRequestConfig(config) 
     .build(); 

그것이 어떤 의미가 setConnectionRequestTimeout(timeout)도 나는 사용자 지정 연결 관리자가없는 전화를 할 수 있도록 하는가/풀 설정?

내가 이해하는 한, setConnectionRequestTimeout(timeout)은 연결 관리자/풀에서 연결 대기 시간을 설정하는 데 사용됩니다.

httpClient (주석 행 참조)에 연결 관리자를 설정하지 않습니다.

답변

4

connectionRequestTimeout은 연결 풀이 있고 모두 사용 중이므로 연결 관리자가 요청을하기 위해 연결을 허용하지 않을 때 발생합니다.

그래서, 당신의 질문에 대한 답변 :

그것이 어떤 의미가 setConnectionRequestTimeout (타임 아웃) 심지어는 사용자 지정 연결 관리자가없는 전화를 할 수 있도록 하는가/풀 설정?

입니다.

default implementation에는 내부 연결 풀이 있기 때문입니다. 예, 연결 요청 시간 초과를 지정하는 것이 좋습니다. 사실 그것은 좋은, 안전한 연습입니다.

5

Isuru의 대답은 대부분 정확합니다. 기본 연결 관리자는 PoolingHttpClientConnectionManager입니다.
그러나 기본적으로 풀에는 하나의 연결 만 있습니다. 동일한 스레드에서 HttpClient을 동 기적으로 사용하는 경우 ConnectionRequestTimeout이 적용되는 상황을 경험해서는 안됩니다.
여러 스레드에서 HttpClient을 사용하는 경우이 스레드를 설정하는 것이 좋지만, 다른 한편으로는 풀 크기를 늘려야 할 수도 있습니다.
단일 스레드 httpclient를 사용하는 경우에는 그대로 두는 것이 안전합니다.

+0

Isuru의 대답에 대한 자세한 설명을 주셔서 감사합니다. 그가 처음 대답 한 이래로 나는 그에게 현상금을 줄 것이다. – Diyarbakir

관련 문제