Thrift连接池实现

上传人:xy****7 文档编号:45537570 上传时间:2018-06-17 格式:DOCX 页数:15 大小:33.53KB
返回 下载 相关 举报
Thrift连接池实现_第1页
第1页 / 共15页
Thrift连接池实现_第2页
第2页 / 共15页
Thrift连接池实现_第3页
第3页 / 共15页
Thrift连接池实现_第4页
第4页 / 共15页
Thrift连接池实现_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《Thrift连接池实现》由会员分享,可在线阅读,更多相关《Thrift连接池实现(15页珍藏版)》请在金锄头文库上搜索。

1、简介简介Thrift 是 Facebook 的核心框架之一,使不同的开发语言开发的系统可以通过该框架实现彼此的通信,类似于 webservice,但是 Thrift 提供了近乎变态的效率和开发的方便性,是 webservice 所不能比拟的。给分布式开发带来了极大的方便。但是这柄利器也有一些不完美。 问题问题首先文档相当的少,只有一个 wiki 网站提供相应的帮助。这对于 Thrift 的推广极为不利。其次框架本身实现有一些缺陷,就 Thrift 的 java 部分来说,没有提供连接池的支持,对RPC 的调用效率有所影响。对于文档稀少的问题,只能是通过一些 Thrift 的开发者和使用者多供献

2、一些自己的心得来解决。这得需要一个过程。而连接池的问题的解决则可以快速一些。提到池一般做过 Java 开发的肯定会想到 ObjectPool,Apache Commons 项目确实给我们的开发得来了很大的便利性,其中的 pool 项目正是我们实现 thrift 连接池的基础,当然也少不了神器 spring framework。实现实现一,定义 thrift 连接池接口ConnectionProvider/* (#)ConnectionProvider.java 0.1 05/11/17* Copyright 2010 QISI, Inc. All rights reserved.* QISI

3、PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*/package com.qidea.thrift.pool;import org.apache.thrift.transport.TSocket;/* * author sunwei* version 2010-8-6* since JDK1.5*/public interface ConnectionProvider/* 取链接池中的一个链接 * * return*/public TSocket getConnection();/* 返回链接 * * param socke

4、t*/public void returnCon(TSocket socket);二,实现连接池GenericConnectionProvider/* (#)DefaultConnectionProviderImpl.java 0.1 05/11/17* Copyright 2010 QISI, Inc. All rights reserved.* QISI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*/package com.qidea.thrift.pool;import mons.pool.ObjectPool;i

5、mport mons.pool.impl.GenericObjectPool;import org.apache.thrift.transport.TSocket;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;/* * author sunwei* version 2010-8-10* since JDK1

6、.5*/public class GenericConnectionProvider implements ConnectionProvider,InitializingBean, DisposableBeanpublic static final Logger logger = LoggerFactory.getLogger(GenericConnectionProvider.class);/* 服务的 IP 地址 */ private String serviceIP;/* 服务的端口 */private int servicePort;/* 连接超时配置 */ private int c

7、onTimeOut;/* 可以从缓存池中分配对象的最大数量 */ private int maxActive = GenericObjectPool.DEFAULT_MAX_ACTIVE;/* 缓存池中最大空闲对象数量 */ private int maxIdle = GenericObjectPool.DEFAULT_MAX_IDLE;/* 缓存池中最小空闲对象数量 */ private int minIdle = GenericObjectPool.DEFAULT_MIN_IDLE;/* 阻塞的最大数量 */ private long maxWait = GenericObjectPool

8、.DEFAULT_MAX_WAIT;/* 从缓存池中分配对象,是否执行 PoolableObjectFactory.validateObject 方法 * /private boolean testOnBorrow = GenericObjectPool.DEFAULT_TEST_ON_BORROW;private boolean testOnReturn = GenericObjectPool.DEFAULT_TEST_ON_RETURN;private boolean testWhileIdle = GenericObjectPool.DEFAULT_TEST_WHILE_IDLE;/*

9、对象缓存池 */ private ObjectPool objectPool = null;/* */Overridepublic void afterPropertiesSet() throws Exception/ 对象池 objectPool = new GenericObjectPool();/(GenericObjectPool) objectPool).setMaxActive(maxActive);(GenericObjectPool) objectPool).setMaxIdle(maxIdle);(GenericObjectPool) objectPool).setMinId

10、le(minIdle);(GenericObjectPool) objectPool).setMaxWait(maxWait);(GenericObjectPool) objectPool).setTestOnBorrow(testOnBorrow);(GenericObjectPool) objectPool).setTestOnReturn(testOnReturn);(GenericObjectPool) objectPool).setTestWhileIdle(testWhileIdle);(GenericObjectPool) objectPool).setWhenExhausted

11、Action(GenericObjectPool.WHEN_EXHAUSTED_BLOCK);/ 设置 factory ThriftPoolableObjectFactory thriftPoolableObjectFactory = new ThriftPoolableObjectFactory(serviceIP, servicePort, conTimeOut);objectPool.setFactory(thriftPoolableObjectFactory);Overridepublic void destroy()tryobjectPool.close();catch (Excep

12、tion e)throw new RuntimeException(“erorr destroy()“, e);Overridepublic TSocket getConnection()tryTSocket socket = (TSocket) objectPool.borrowObject();return socket;catch (Exception e)throw new RuntimeException(“error getConnection()“, e);Overridepublic void returnCon(TSocket socket)tryobjectPool.ret

13、urnObject(socket);catch (Exception e)throw new RuntimeException(“error returnCon()“, e);public String getServiceIP()return serviceIP;public void setServiceIP(String serviceIP)this.serviceIP = serviceIP;public int getServicePort()return servicePort;public void setServicePort(int servicePort)this.serv

14、icePort = servicePort;public int getConTimeOut()return conTimeOut;public void setConTimeOut(int conTimeOut)this.conTimeOut = conTimeOut;public int getMaxActive()return maxActive;public void setMaxActive(int maxActive)this.maxActive = maxActive;public int getMaxIdle()return maxIdle;public void setMax

15、Idle(int maxIdle)this.maxIdle = maxIdle;public int getMinIdle()return minIdle;public void setMinIdle(int minIdle)this.minIdle = minIdle;public long getMaxWait()return maxWait;public void setMaxWait(long maxWait)this.maxWait = maxWait;public boolean isTestOnBorrow()return testOnBorrow;public void set

16、TestOnBorrow(boolean testOnBorrow)this.testOnBorrow = testOnBorrow;public boolean isTestOnReturn()return testOnReturn;public void setTestOnReturn(boolean testOnReturn)this.testOnReturn = testOnReturn;public boolean isTestWhileIdle()return testWhileIdle;public void setTestWhileIdle(boolean testWhileIdle)this.testWhileIdle = testWhileIdle;public ObjectPool getO

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号