2017-02-07 9 views
1

CloseableHttpAsyncClientを使用して、消費するapiを接続しようとしています。私は45の接続プールと5分のタイムアウトでAPIを呼び出している。しかし、私は次のエラーが発生します。そして、10に接続プールのサイズを小さくすることで、倍のエラーの数がスローされ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) 

がダウンしています。

私はCloseableHttpAsyncClientのシングルトンインスタンスを使用していますが、より高速な呼び出しのために閉じないでください。

これは私がそれを呼び出しています方法です:

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

私が思うに、それはAPI側からのものではありません。 この例外が発生し、接続プールから接続されているという考えはありますか?

答えて

1

ソースコードを見ると、connectionRequestTimeoutを接続マネージャのデフォルト(-1)と異なる値に設定した場合(PoolingNHttpClientConnectionManagerなど)に発生します。プールが非常にビジー状態でタイムアウトが足りない場合、この例外がスローされます。

解決するには、接続マネージャプールのconnectionRequestTimeoutを増やすか、-1に設定します(不定の待機の場合)。

関連する問題