我有一些代码基本上对网址发出POST请求。我在用于创建和维护HttpClient实例的Util类中的HttpClient实例上设置了一些默认设置:
cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(100);
cm.setDefaultMaxPerRoute(100);
RequestConfig config = RequestConfig.custom()
.setConnectionRequestTimeout(500)
.setConnectTimeout(10)
.setSocketTimeout(2000)
.setExpectContinueEnabled(true)
.setStaleConnectionCheckEnabled(true).build();
httpClient = HttpClients.custom()
.setDefaultRequestConfig(config)
.setConnectionManager(cm)
.build();
在IntelliJ中运行的我的mac上本地运行时,此代码可以正常运行。我通过将socketTimeout设置为5毫秒来测试它。按预期引发套接字异常。顺便说一下,这是一个独立的Java应用程序。不会在容器中运行。
我的问题是当我将此应用程序推送到运行ubuntu的EC2实例时。当我通过将套接字超时降低到一个非常低的值来使用相同版本的应用程序执行完全相同的测试时,它根本没有任何影响。
为什么会发生这种情况?我是否应该使用它?我基本上想确保对此URL的调用总共不会超过2秒。这是否是正确的方法,或者我是否需要为每个请求生成一个线程(似乎有点过分)来监视每个请求并在超时后杀死它?