zoukankan      html  css  js  c++  java
  • Java异步执行多个HTTP请求的例子(需要apache http类库)

    直接上代码

    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 ###");
    
        }
    
    }
  • 相关阅读:
    C#在与java对接时候的UrlEncode的坑
    sql server 删除大量数据的一次坑爹之旅
    js实现黑客帝国文字下落效果
    第一个SignalR案例
    简单的放天灯动画
    计量单位符号的书写规范【转】
    阿里云OSS搭建移动应用直传服务的.Net C#示例
    UWP Windows10开发更新磁贴和动态更新磁贴
    UWP Windows10开发获取设备位置(经纬度)
    Asp.Net识别手机访问
  • 原文地址:https://www.cnblogs.com/starcrm/p/5216303.html
Copyright © 2011-2022 走看看