CloseableHttpAsyncClient
时间: 2023-08-20 16:13:37 浏览: 91
CloseableHttpAsyncClient 是一个基于 Apache HttpComponents 的异步 HTTP 客户端,它可以在异步模式下执行 HTTP 请求。\[2\]通过调用 start 方法,可以启动异步 HTTP 客户端并开始处理请求。\[1\]一旦客户端启动,可以使用 execute 方法提交请求,并返回一个 Future 对象,用于获取异步执行的结果。\[3\]
#### 引用[.reference_title]
- *1* *2* *3* [CloseableHttpAsyncClient 的 start 方法](https://blog.csdn.net/qq_41045651/article/details/130344514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关问题
closeablehttpasyncclient
CloseableHttpAsyncClient是一个基于Apache HttpComponents的异步HTTP客户端,它可以在后台线程中执行HTTP请求和响应。它支持HTTP/1.1和HTTP/2协议,并提供了连接池、请求重试、请求超时等功能。它还支持SSL/TLS加密和代理服务器。
那写一个自定义CloseableHttpAsyncClient并且添加连接池的全代码
好的,以下是一个示例代码,其中使用了Apache HttpAsyncClient 4.1版本,并添加了连接池。
```
import java.io.IOException;
import java.util.concurrent.Future;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.apache.http.nio.client.methods.HttpAsyncMethods;
import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
import org.apache.http.util.EntityUtils;
public class CustomHttpAsyncClient implements AutoCloseable {
private final CloseableHttpAsyncClient httpClient;
public CustomHttpAsyncClient() {
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000) // 连接超时时间
.setConnectionRequestTimeout(5000) // 请求超时时间
.setSocketTimeout(5000) // 套接字超时时间
.build();
httpClient = HttpAsyncClients.custom()
.setDefaultRequestConfig(requestConfig)
.setSSLHostnameVerifier(new NoopHostnameVerifier()) // 禁止主机名验证
.setMaxConnTotal(100) // 最大连接数
.setMaxConnPerRoute(20) // 每个路由最大连接数
.build();
httpClient.start();
}
public Future<HttpResponse> executeHttpGet(String url) {
HttpGet httpGet = new HttpGet(url);
HttpAsyncRequestProducer requestProducer = HttpAsyncMethods.create(httpGet);
HttpAsyncResponseConsumer<HttpResponse> responseConsumer = new CustomResponseConsumer();
return httpClient.execute(requestProducer, responseConsumer, null);
}
@Override
public void close() throws IOException {
httpClient.close();
}
private static class CustomResponseConsumer extends AbstractResponseConsumer<HttpResponse> {
@Override
protected void onResponseReceived(HttpResponse response) throws IOException {
// 响应接收后的处理
}
@Override
protected HttpResponse buildResult() throws Exception {
HttpResponse response = getResponse();
HttpEntity entity = response.getEntity();
if (entity != null) {
response.setEntity(new CustomHttpEntity(entity));
}
return response;
}
}
private static class CustomHttpEntity extends HttpEntityWrapper {
public CustomHttpEntity(HttpEntity wrappedEntity) {
super(wrappedEntity);
}
@Override
public void consumeContent() throws IOException {
// 内容消耗前的处理
wrappedEntity.consumeContent();
}
@Override
public byte[] getContent() throws IOException {
// 内容获取前的处理
return EntityUtils.toByteArray(wrappedEntity);
}
}
}
```
其中,CustomHttpAsyncClient为自定义的HttpAsyncClient类,包含executeHttpGet方法用于执行HttpGet请求;CustomResponseConsumer和CustomHttpEntity分别为自定义的响应处理类和HttpEntity实现类,用于在响应接收后处理响应数据。在构造函数中,设置连接超时时间、请求超时时间和套接字超时时间,并设置最大连接数和每个路由最大连接数。在close方法中关闭httpClient。