package com.k.ctc.code.asynchttp;
import java.util.concurrent.CountDownLatch;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.concurrent.FutureCallback;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients;
/**
* @author Kai
* @Date 2016-1-6 11:14:56
* @Desc
*/
public class AsyncClient {
public static void main(String[] args) throws Exception {
// 设置HTTP请求的超时配置
RequestConfig config = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000).build();
// 根据配置创建异步的HTTP客户端
CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom().setDefaultRequestConfig(config).build();
//运行客户端
httpclient.start();
//构建5个HTTPGET请求
HttpGet[] requests = new HttpGet[]{
new HttpGet("https://www.baidu.com/"),
new HttpGet("https://www.baidu.com/"),
new HttpGet("https://www.baidu.com/"),
new HttpGet("https://www.baidu.com/"),
new HttpGet("https://www.baidu.com/")};
//创建一个计数器
final CountDownLatch latch = new CountDownLatch(requests.length);
//循环请求
for (final HttpGet get : requests) {
httpclient.execute(get, new FutureCallback<HttpResponse>() {
@Override
public void completed(HttpResponse t) {
latch.countDown();
System.out.println("==================================");
System.out.println(t.getStatusLine());
}
@Override
public void failed(Exception excptn) {
latch.countDown();
System.out.println("HttpGet failed");
}
@Override
public void cancelled() {
latch.countDown();
System.out.println("HttpGet cancelled");
}
});
}
//等待5个都请求完成
latch.await();
System.out.println("Shutting down");
//关闭
httpclient.close();
}
}
以下是使用Maven引用的jar(并不知道是不是都有使用到):
<properties>
<httpclient.version>4.4</httpclient.version>
</properties>
<!-- HTTP CLIENT START -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore-nio</artifactId>
<version>${httpclient.version}</version>
</dependency>
<!-- HTTP CLIENT END -->