2017-02-07 36 views
1

CloseableHttpAsyncClient을 사용하여 apire를 연결하려고합니다. 나는 45 분의 연결 풀과 5 분의 타임 아웃으로 api에 전화를한다. CloseableHttpAsyncClient에 대한 TimeoutException

java.util.concurrent.TimeoutException: null 
    at org.apache.http.nio.pool.AbstractNIOConnPool.processPendingRequest(AbstractNIOConnPool.java:364) 
    at org.apache.http.nio.pool.AbstractNIOConnPool.processNextPendingRequest(AbstractNIOConnPool.java:344) 
    at org.apache.http.nio.pool.AbstractNIOConnPool.release(AbstractNIOConnPool.java:318) 
    at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.releaseConnection(PoolingNHttpClientConnectionManager.java:303) 
    at org.apache.http.impl.nio.client.AbstractClientExchangeHandler.releaseConnection(AbstractClientExchangeHandler.java:239) 
    at org.apache.http.impl.nio.client.MainClientExec.responseCompleted(MainClientExec.java:387) 
    at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseCompleted(DefaultClientExchangeHandlerImpl.java:168) 
    at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.processResponse(HttpAsyncRequestExecutor.java:436) 
    at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.inputReady(HttpAsyncRequestExecutor.java:326) 
    at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:265) 
    at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81) 
    at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39) 
    at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114) 
    at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162) 
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337) 
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315) 
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276) 
    at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104) 
    at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588) 
    at java.lang.Thread.run(Thread.java:745) 

그런 다음 10 연결 풀 크기를 줄이는, 슬로우되는 시간 오류의 수를 다운 : 그러나, 나는 다음과 같은 오류가 발생합니다.

나는 CloseableHttpAsyncClient이라는 싱글 톤 인스턴스를 사용하고 있으며 더 빠른 호출을 위해이 인스턴스를 닫지 마십시오.

이것은 내가 그것을 호출 오전 방법입니다

httpclient.execute(post, new FutureCallback<HttpResponse>(....)); 

내가 생각, 그것은 아니다는 API 측면에서. 이 예외가 발생하고 연결 풀에서 어떤 연결이 있습니까?

답변

1

소스 코드를 보면 connectionRequestTimeout을 연결 관리자 (예 : PoolingNHttpClientConnectionManager)의 기본값 (-1)과 다른 값으로 설정하면 이러한 현상이 발생합니다. 풀이 매우 사용량이 많지 않고 시간 초과로 충분하지 않은 경우이 예외가 throw됩니다.

해결하려면 연결 관리자 풀의 connectionRequestTimeout을 늘리거나 -1 (무기한 대기)으로 설정하십시오.