2017-04-19 1 views
0

HttpAsyncClient에 대한 몇 가지 기본 개념을 이해하고 싶습니다.HttpAsyncClient 예외를 처리하는 방법

  1. 여기서 연결 풀을 사용하고 있지 않습니다. 여기 (1) 또는 (2)의 실패한 http 요청을 닫는 올바른 방법은 무엇입니까?

  2. 새로운 요청마다 httpclient를 초기화하면 성능에 미치는 영향은 무엇입니까?

  3. 모든 실패한 요청에 대해 finally 블록에서 연결을 닫아야합니까, 그렇게하지 않는 것이 단점입니까?

RequestConfig 구성 RequestConfig.custom =() setConnectTimeout (3 * 1000) .setConnectionRequestTimeout (3 * 1000) .setSocketTimeout (30 * 1000) .build().; CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom(). setDefaultRequestConfig (config) .build();

httpclient.start();

시도는 {

if (targetHost != null && httpget != null) 
    response = httpclient.execute(HttpHost, HttpGet); 
catch (Exception e) { 

    throw new CustomException("service.unavailable"); 

} finally { 
    if (httpget != null){ 
     httpget.releaseConnection(); (1) 
     httpclient.close();(2) 
    } 

} 

답변

1

모든 먼저 눈에 확인을 보인다. 나는 httpget.releaseConnection()을 없애고, 필요하지 않다. close 문을 실행하면 필요한 모든 것을 처리하고 연결을 실행하는 스레드를 해제 할 수 있습니다. 그 종류의 대답은 당신의 세 번째 질문입니다; 연결을 닫으면 연결된 자원이 해제됩니다.

각 요청을 새 연결로 초기화하는 방법은 다음과 같습니다. 나는 당신이 이것으로 연결하고있는 서버/웹 사이트의 응답으로 자원에 관심을 갖지 않을 것입니다. 웹 요청을 여는 것은 실제로 시간을내어 서버를 기다리지 않고 응답을 기다리고 있습니다. 나는 웹 요청을 처리하는 모든 기능을 최적화 된 함수로 작성하고 각 요청에 대해 호출한다. 이렇게하면 다중 연결 응용 프로그램을 만들 수있는 문을 열어 여러 연결을 설정할 수 있고 다른 세션은 사용 중일 수있다.

+0

감사합니다. 에드워드, 마지막으로 차단 된 상태에서 httpclient 연결을 닫지 않으면 실패한 연결을 닫지 않고 새 요청으로 새 스레드가 생성됩니다. 마침내 블록이 없으면 내 코드가 제대로 작동합니다. – Sindhu

관련 문제