• 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 ###");
    
        }
    
    }
  • 相关阅读:
    RabbitMqBase消息队列小结
    PtrSwap不仅仅是原地交换两个数
    InterfaceSummary接口小结
    InterfaceDesign接口设计原则
    InitOrder初始化执行顺序
    golang面向对象编程思想
    golang之工厂模式
    golang之方法
    golang之结构体使用注意事项和细节
    golang之匿名函数结合defer
  • 原文地址:https://www.cnblogs.com/starcrm/p/6944912.html
Copyright © 2020-2023  润新知