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 ###");
    
        }
    
    }
  • 相关阅读:
    今天看了几个小时的微信小程序说说心得体会
    关于wordpress中的contact form7和WP Mail SMTP的一些设置
    关于163发邮件报错535 Error:authentication failed解决方法
    Numpy 基本除法运算和模运算
    基本的图像操作和处理
    Python中flatten用法
    media
    TensorFlow模型保存和提取方法
    docker 默认用户和密码
    Windows安装TensorFlow
  • 原文地址:https://www.cnblogs.com/starcrm/p/6944912.html
Copyright © 2011-2022 走看看