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 -->