博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java异步执行多个HTTP请求的例子(需要apache http类库)
阅读量:4134 次
发布时间:2019-05-25

本文共 3373 字,大约阅读时间需要 11 分钟。

直接上代码

 

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
() { @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 ###"); }}

 

转载地址:http://dxpvi.baihongyu.com/

你可能感兴趣的文章
最长递增子序列
查看>>
从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小...
查看>>
判断一个整数是否是回文数
查看>>
经典shell面试题整理
查看>>
腾讯的一道面试题—不用除法求数字乘积
查看>>
素数算法
查看>>
java多线程环境单例模式实现详解
查看>>
将一个数插入到有序的数列中,插入后的数列仍然有序
查看>>
在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found
查看>>
万年历
查看>>
作为码农你希望面试官当场指出你错误么?有面试官这样遭到投诉!
查看>>
好多程序员都认为写ppt是很虚的技能,可事实真的是这样么?
查看>>
如果按照代码行数发薪水会怎样?码农:我能刷到公司破产!
查看>>
程序员失误造成服务停用3小时,只得到半月辞退补偿,发帖喊冤
查看>>
码农:很多人称我“技术”,感觉这是不尊重!纠正无果后果断辞职
查看>>
php程序员看过来,这老外是在吐糟你吗?看看你中了几点!
查看>>
为什么说程序员是“培训班出来的”就是鄙视呢?
查看>>
码农吐糟同事:写代码低调点不行么?空格回车键与你有仇吗?
查看>>
阿里p8程序员四年提交6000次代码的确有功,但一次错误让人唏嘘!
查看>>
一道技术问题引起的遐想,最后得出结论技术的本质是多么的朴实!
查看>>