gpt4 book ai didi

java - 在多线程环境中使用 apache HttpClients 的最佳方式

转载 作者:行者123 更新时间:2023-12-05 05:52:53 39 4
gpt4 key购买 nike

我需要在服务器端创建一个服务来发送 HTTP 请求。它是这样工作的:

1. Client sends a request to the server
2. Server uses singleton service for calling 3rd-party API via HTTP.
3. API returns the response
4. Server process this response and return it to the client

这是一个同步过程。

我创建了服务:

public class ApacheHttpClient {

private final static CloseableHttpClient client = HttpClients.createDefault();

public String sendPost(String serverUrl, String body) {
try {
HttpPost httpPost = new HttpPost(serverUrl);
httpPost.setEntity(new StringEntity(body));

CloseableHttpResponse response = client.execute(httpPost);

String responseAsString = EntityUtils.toString(response.getEntity());

response.close();

return responseAsString;
} catch (IOException e) {
throw new RestException(e);
}
}

ApacheHttpClient 在我的系统中是一个单例。 CloseableHttpClient 客户端也是一个单例。

问题 1:使用 CloseableHttpClient 客户端 的一个实例是否正确,或者我应该为每个请求创建一个新实例?问题二:什么时候关闭客户端?问题3:这个客户端在一个时间段内只能处理2个连接。我应该使用执行器吗?

最佳答案

  1. 将 HttpClient 实例用作每个不同 HTTP 服务的单例是正确的,并且符合 Apache HttpClient 最佳实践。不过,它应该是静态的。

    http://hc.apache.org/httpcomponents-client-5.1.x/migration-guide/preparation.html

  2. 释放HTTP服务时应关闭HttpClient。在你的情况下 ApacheHttpClient应该实现 Closeable并关闭 CloseableHttpClient 的内部实例在其 #close方法。

  3. 您可能不应该这样做,但这实际上取决于您的应用程序处理请求执行的准确程度。

关于java - 在多线程环境中使用 apache HttpClients 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70022369/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com