如果我不使用自定义连接管理器,是否仍应在 Apache HttpClient 上设置 ConnectionRequestTimeout?
Should I still set ConnectionRequestTimeout on Apache HttpClient if I don't use a custom connection manager?
我正在使用 Apache RequestConfig 在我的 HttpClient
上配置一些超时。
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)
用于设置从连接manager/pool.
等待连接的时间
请注意,我没有在 httpClient
上设置连接管理器(请参阅注释行)。
connectionRequestTimeout
当您有一个连接池并且它们都很忙,不允许连接管理器给您一个连接来发出请求时,就会发生这种情况。
那么,您的问题的答案是:
Does it make any sense to call setConnectionRequestTimeout(timeout)
even I don't have a custom Connection Manager / Pool set up?
是。
这是因为 default implementation 有一个内部连接池。
所以,是的,指定连接请求超时是有意义的。实际上这是一个很好的、安全的做法。
Isuru 的回答基本正确。默认连接管理器是 PoolingHttpClientConnectionManager
.
但是,默认情况下它的池中只有一个连接。
如果您在同一个线程中同步使用 HttpClient
,您永远不会遇到 ConnectionRequestTimeout
生效的情况。
如果您在多个线程中使用 HttpClient
,那么您可能想要设置它,但您可能还想增加池大小等。
对于单线程 httpclient 使用,将其保留是安全的。
我正在使用 Apache RequestConfig 在我的 HttpClient
上配置一些超时。
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)
用于设置从连接manager/pool.
请注意,我没有在 httpClient
上设置连接管理器(请参阅注释行)。
connectionRequestTimeout
当您有一个连接池并且它们都很忙,不允许连接管理器给您一个连接来发出请求时,就会发生这种情况。
那么,您的问题的答案是:
Does it make any sense to call setConnectionRequestTimeout(timeout) even I don't have a custom Connection Manager / Pool set up?
是。
这是因为 default implementation 有一个内部连接池。 所以,是的,指定连接请求超时是有意义的。实际上这是一个很好的、安全的做法。
Isuru 的回答基本正确。默认连接管理器是 PoolingHttpClientConnectionManager
.
但是,默认情况下它的池中只有一个连接。
如果您在同一个线程中同步使用 HttpClient
,您永远不会遇到 ConnectionRequestTimeout
生效的情况。
如果您在多个线程中使用 HttpClient
,那么您可能想要设置它,但您可能还想增加池大小等。
对于单线程 httpclient 使用,将其保留是安全的。