2016-06-16 29 views
6

Sto usando Apache RequestConfig configurare alcune timeout sul mio HttpClient.Devo ancora impostare ConnectionRequestTimeout su Apache HttpClient se non utilizzo una gestione connessione personalizzata?

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(); 

Se la soluzione sia senso chiamare setConnectionRequestTimeout(timeout) anche io non hanno un Connection Manager custom/Pool istituito?

Per quanto ho capito, setConnectionRequestTimeout(timeout) viene utilizzato per impostare il tempo di attesa per una connessione da Connection Manager/piscina.

Si noti che io non sono la creazione di una gestione connessione sul httpClient (vedi linea commentata).

risposta

4

connectionRequestTimeout si verifica quando si dispone di un pool di connessioni e sono tutte occupate, non consentendo al gestore connessioni di fornire una connessione per effettuare la richiesta.

Quindi, la risposta alla tua domanda di:

Ha un qualche senso chiamare setConnectionRequestTimeout (timeout) anche io non ho un Connection Manager custom/Pool istituito?

è sì.

Questo perché il default implementation dispone di una piscina collegamento interno. Quindi, sì, ha senso specificare un timeout della richiesta di connessione. In realtà è una pratica buona e sicura.

5

risposta di Isuru è per lo più corretta. Il gestore connessioni predefinito è un PoolingHttpClientConnectionManager.
Tuttavia, per impostazione predefinita avrà una sola connessione nel proprio pool. Se si utilizza lo HttpClient in modo sincrono dallo stesso thread, non si dovrebbe mai verificare una situazione in cui lo ConnectionRequestTimeout avrà effetto.
Se si utilizza lo HttpClient da più thread, è possibile che si desideri impostarlo, ma probabilmente si desidera anche aumentare le dimensioni del pool, tra le altre cose.
Per l'utilizzo del httpclient a thread singolo è possibile escluderlo.

+0

Grazie per l'elaborazione della risposta di Isuru. Gli darò la generosità da quando ha risposto per primo. – Diyarbakir