• 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 ###");
    
        }
    
    }
  • 相关阅读:
    NOJ-1581 筷子 (线性DP)
    UVA-242 Stamps and Envelope Size (DP)
    POJ 1860 (SPFA判断正环)
    POJ 3268 最短路水题
    STL----priority_queue
    STL----unique
    POJ 2031(最小生成树Kruskal算法+几何判断)
    POJ 3468(线段树区间修改+区间求和)
    学习线段树
    POJ 1251(最小生成树裸题)
  • 原文地址:https://www.cnblogs.com/starcrm/p/5216303.html
Copyright © 2020-2023  润新知