httpAysnClient使用
来源:互联网 发布:手机做菜单软件 编辑:程序博客网 时间:2024/06/06 16:28
项目中经常会需要发送HTTP请求,我这边使用的是apache的 httpClient包,
但是httpClient支持的是同步请求, apache提供了一个 httpasyncClient,基于java NIO
网上看了不少资料,发现写的不是很具体,有点像是小的demo,无法在生产环境运行
而且调用http的execute返回 Futrue<?>类来实现所谓的异步,我更倾向于基于 回调函数的方式
此处代码是基于 httpasyncclient 4.1.3
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.1.3</version>
</dependency>
String url="http://www.xxxxx.com"; //此处应该是因为使用的是select模式,利用多核的性质提高并发 IOReactorConfig ioReactorConfig = IOReactorConfig.custom() .setIoThreadCount(Runtime.getRuntime().availableProcessors()) .build(); RequestConfig config=RequestConfig.custom() .setConnectionRequestTimeout(20000) // 从连接池获取连接的 timeout .setConnectTimeout(20000) // 发送http请求 连接目标服务器的timeout .setSocketTimeout(20000) // 获取目标服务器数据的timeout .build(); ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig); PoolingNHttpClientConnectionManager httpConnectionManager = new PoolingNHttpClientConnectionManager(ioReactor); httpConnectionManager.setMaxTotal(2000); httpConnectionManager.setDefaultMaxPerRoute(500); CloseableHttpAsyncClient httpClient = HttpAsyncClients.custom() .setConnectionManager(httpConnectionManager) .setDefaultRequestConfig(config).build(); httpClient.start(); HttpGet httpGet = new HttpGet(url); httpClient.execute(httpGet, new FutureCallback<HttpResponse>() { @Override public void completed(HttpResponse httpResponse) { System.out.println(httpResponse.getStatusLine().getStatusCode()); } @Override public void failed(Exception e) { e.printStackTrace(); } @Override public void cancelled(){ System.out.println("connection is closed"); } }); /** * 不要关闭 client,close方法会关闭PoolingNHttpClientConnectionManager,导致异步监听器还没 * 收到响应就被关闭了,被这个坑了好久 * 生产环境可以维护这个httpClient不要关闭 */ //httpClient.close();
ps:
当从连接处从获取连接超时,会抛出 TimeoutException
当连接远程服务器超时,会抛出 ConnectException
当从远程服务器接收数据超时,会抛出 SocketTimeoutException
阅读全文
0 0
- httpAysnClient使用
- 使用
- 使用
- 使用
- 使用
- 使用
- 使用
- 使用++,--
- 使用$@ $!
- 使用
- SoftICE使用(指令使用)
- 使用GraphEdit使用
- 使用HtmlParser使用心得
- 时钟使用使用
- Ubuntu 使用Git 使用
- Ubuntu 使用Git 使用
- GUID使用的使用
- Git使用 tortoisegit使用
- apache如何设置http自动跳转到https
- android 代码编译镜像时添加应用,删除应用
- 语音录制工具类
- 判断链路上数据包丢失情况
- 正确的关闭资源
- httpAysnClient使用
- hdu4310 Hero
- datacleaner第八部分
- Error configuring application listener of class XXX ClassNotFoundException
- 终端输出打印日志
- JS数组方法汇总 array数组元素的添加和删除
- SpringBoot之文件上传
- BZOJ 3670: [Noi2014]动物园&&51nod 1277 字符串中的最大值
- Oracle12C 的安装图文教程