当前位置: 首页 > 知识库问答 >
问题:

CloseableHttpClient:连接永远挂起

轩辕嘉平
2023-03-14

我对CloseableHttpClient管理的连接有问题。Spring服务管理纽约连接:

@Service
public class MyService {
...
    private CloseableHttpClient closeableHttpClient;

    public String setPayment() {
...
        try {
            HttpPost httpPost = new HttpPost(url);
            httpPost.setHeader(ACCEPT, APP_JSON);
            httpPost.setHeader(CONTENT_TYPE, APP_JSON);
            StringEntity entity = new StringEntity(request, CHARSET);
            httpPost.setEntity(entity);
            CloseableHttpResponse response = closeableHttpClient.execute(httpPost);
            logger.info("Execution");
        } catch (IOException e) {
            logger.error("Error");
        }
    }
}

当执行不成功时,我的setPayment方法最多调用3次。有时在第一次执行后,我的方法挂起而没有响应。欢迎任何建议。

共有1个答案

魏俊茂
2023-03-14

我建议你做以下事情:

1) 在构造函数中设置超时:

public MyService() {
        int timeout = 180;      
        RequestConfig config = RequestConfig.custom()
                .setConnectTimeout(timeout * 1000)
                .setConnectionRequestTimeout(timeout * 1000)
                .setSocketTimeout(timeout * 1000).build();
        closeableHttpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
    }

2) 使用try with resources管理CloseableHttpResponse

    public String setPayment() {
    ...

                HttpPost httpPost = new HttpPost(url);
                httpPost.setHeader(ACCEPT, APP_JSON);
                httpPost.setHeader(CONTENT_TYPE, APP_JSON);
                StringEntity entity = new StringEntity(request, CHARSET);
                httpPost.setEntity(entity);
try (CloseableHttpResponse response = closeableHttpClient.execute(httpPost)){                
                logger.info("Execution");
            } catch (IOException e) {
                logger.error("Error");
            }
        }
 类似资料:
  • 有什么让我怀念的吗?如果我必须手动关闭连接,是不是至少可以从Javers那里收到一个不再需要连接的通知?

  • 当我使用CloseableHttpClient和do Execute方法时,它在第一次正常工作,但之后从未成功。它将引发表示“连接池关闭”的异常 有人说是因为我还没有关闭客户端有人说是httpClient 4.3中的bug 我的项目不存在上述问题,但仍然无法正常工作

  • 我正在使用JMeter测试Spring Boot REST API服务器。 JMeter选项包括 测试一直进行到1-20000个请求, 但请看下面的图片。 平均响应时间在10ms以下,但有时超过20~50ms。 当响应时间增加时,将出现连接超时。 即使我将连接超时设置为超过10分钟。 为什么会出现这个错误?我找不到..

  • 问题内容: 我知道在这里和互联网上已经创建了有关该主题的许多主题。但是,我真的无法就两个语句之间的区别得出最终的结论!我的意思是,尝试并尝试可以通过查询获得所需的所有结果,但是我真的无法完全控制刀具! 我正在考虑自己是一个非常优秀的程序员和一个非常出色的SQL-ista,对此我感到有些as愧… 这是一个例子: 我有一个包含网站页面的表格(“ web_page”) 具有类别(“类别”)的表格。 一个

  • 我面临的问题是: < li >当我加载页面时,服务器的控制台中会显示套接字(我可以获取远程地址和远程端口) < li >无论我做什么,客户端中的连接总是挂起。我尝试了Chrome、Brave、Mozilla和Safari,但似乎没有一个能用。 我错过了什么?我试图在连接准备好之前不发送消息,但我从未在我的PC中获得过该状态。即使我在没有事件的情况下建立onopen属性,客户端中的警报也不会弹出。

  • 问题内容: 服务器重启后,docker看起来仍然活跃,但是所有命令(例如Ctrl + C)都将永远挂起。有什么事吗 问题答案: 原来实例的正常运行时间超过一年,安装了许多应用程序版本,文件夹中包含数百个显然是旧的废弃容器的项目。 我看到了在交互运行docker进行调试的命令的同时永久读取所有数据的过程。 我删除并重新安装了docker和容器在我的盒子上,问题已解决。 感觉就像我需要一个脚本,该脚本