Java异步执行多个HTTP请求的例子(需要apache http类库)
来源:互联网 发布:人工智能在智能交通 编辑:程序博客网 时间:2024/06/01 12:30
直接上代码
package org.jivesoftware.spark.util;import java.io.IOException;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;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;import org.jivesoftware.DebugPrint;import org.jivesoftware.spark.SparkManager;//异步埋点数据采集工具类public class HotClickAsync { static ExecutorService service = Executors.newSingleThreadExecutor(); //单一线程 // 调用http请求。不阻塞主线程 public static void SendRequest(final String event) throws InterruptedException, IOException { Runnable run = new Runnable() { @Override public void run() { try { SendRequestAsync(event,SparkManager.getSessionManager().getUsername()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; service.execute(run); } // 阻塞HTTP调用 private static void SendRequestAsync(String event,String username) throws InterruptedException, IOException { RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(1000) // http超时 .setConnectTimeout(1000).build(); // 连接超时 CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom() .setDefaultRequestConfig(requestConfig).build(); try { httpclient.start(); final HttpGet[] requests = new HttpGet[] { new HttpGet( "http://XXXXXX.cn:81/HotClick.aspx?event="+ event +"&username="+username) // 第一个采集地址 // , new HttpGet("http://mta.qq.com")//第二个采集地址, http://mta.qq.com/ }; // 同步计数 final CountDownLatch latch = new CountDownLatch(requests.length); for (final HttpGet request : requests) { httpclient.execute(request, new FutureCallback<HttpResponse>() { @Override public void completed(final HttpResponse response) { latch.countDown(); DebugPrint.outStirng(request.getRequestLine() + "####->" + response.getStatusLine()); } @Override public void failed(final Exception ex) { latch.countDown(); DebugPrint.outStirng(request.getRequestLine() + "####->" + ex); } @Override public void cancelled() { latch.countDown(); //DebugPrint.outStirng(request.getRequestLine() // + " cancelled"); } }); } latch.await(); } finally { httpclient.close(); } DebugPrint.outStirng(" ### HotClickAsync Done ###"); }}
0 0
- Java异步执行多个HTTP请求的例子(需要apache http类库)
- Java异步HTTP请求
- Java异步HTTP请求
- 异步的HTTP POST与GET请求例子
- 异步的HTTP POST与GET请求例子
- angularjs结合$http、$q服务实现多个异步请求
- java 的http请求
- Java的Http请求
- http的JAVA请求
- Java利用httpasyncclient进行异步HTTP请求
- Java利用httpasyncclient进行异步HTTP请求
- 异步发送HTTP请求
- Android Http 异步请求
- http异步请求
- HTTP同步/异步请求
- 异步请求http地址
- php异步http请求
- jquery异步http请求
- 优化openfire服务器提升xmpp 效率的15个方法(原创)
- 机器学习研究会每周精华0917
- Liferay开发实战(1):入门
- Liferay开发实战(2):Service Builder生成持久化层,及开发服务层
- 配置nginx的端口来访问不同网站
- Java异步执行多个HTTP请求的例子(需要apache http类库)
- 玄武短信接口和移动MAS短信接口的API封装
- 大数阶乘结果中零的个数
- Hello AS400-Cobol
- 一步步Cobol 400 上手自学入门教程01 - 基础概念
- 一步步Cobol 400 上手自学入门教程02 - 程序结构
- 百宝云安全组的使用
- 一步步Cobol 400 上手自学入门教程03 - 数据部
- DirectX学习笔记(八):Direct3D融合技术详解及物体透明效果的实现