httpclient的池化

我们经常在应用系统中使用httpclient来发送http请求,我们通常会new httpclient创建对象,这样,当请求并发量很大的时候,频繁的创建、销毁httpclient会导致不必要的性能开销,所以有必要对httpclient这个重量级对象进行池化。
在此,我们使用apache提供的common-pool包做相应的事情。
重要代码如下:

点击(此处)折叠或打开

  1. public class HttpClientPool extends GenericObjectPool<HttpClient>{
  2.      //构造方法接受一个PoolableObjectFactory,来定义对象的创建
  3.     public HttpClientPool(PoolableObjectFactory<HttpClient> factory) {
  4.         super(factory);
  5.     }

  6.     //自定义
  7.     public <T> T doPost(HttpMethod method, HttpClientDataCallback<T> callback) {
  8.         HttpClient toUse = null;
  9.         try {
  10.             toUse = borrowObject();
  11.             toUse.executeMethod(method);
  12.             T rel = callback.handleResponse(method.getResponseBodyAsString());
  13.             return rel;
  14.         } catch (Exception e) {
  15.             logger.error(\"failed to execute http request.\", e);
  16.             return null;
  17.         } finally {
  18.             try {
  19.                 method.releaseConnection();
  20.             } catch (Exception e) {
  21.                 //in case fail, ignore and return object
  22.             }
  23.             if (toUse != null) {
  24.                 try {
  25.                     returnObject(toUse);
  26.                 } catch (Exception e) {
  27.                     logger.warn(\"failed to return http client\", e);
  28.                 }
  29.             }
  30.         }
  31.     }
  32. }


PoolableHttpClientFactory:该类实现对池化对象的初始创建动作

点击(此处)折叠或打开

  1. public class PoolableHttpClientFactory implements PoolableObjectFactory<HttpClient> {
  2.     private int contimeout; //Connection time out
  3.     private int sotimeout; //so time out

  4.     public PoolableHttpClientFactory(int contimeout, int sotimeout) {
  5.         this.contimeout = contimeout;
  6.         this.sotimeout = sotimeout;
  7.     }

  8.     /*对象的生成在此定义
  9.      *(non-Javadoc)
  10.      * @see org.apache.commons.pool.PoolableObjectFactory#makeObject()
  11.      */
  12.     @Override
  13.     public HttpClient makeObject() throws Exception {
  14.         HttpClient httpClient = new HttpClient();
  15.         HttpConnectionManagerParams configParams = httpClient.getHttpConnectionManager().getParams();
  16.         configParams.setConnectionTimeout(contimeout);
  17.         configParams.setSoTimeout(sotimeout);
  18.         httpClient.getParams().setConnectionManagerTimeout(contimeout);
  19.         httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, \"UTF-8\");
  20.         return httpClient;
  21.     }
  22. }



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28912557/viewspace-1223241/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28912557/viewspace-1223241/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值