public class TServiceClientPoolFactory<T> extends org.apache.commons.pool.BaseKeyedPoolableObjectFactory<ServerNode,T>
| 构造器和说明 |
|---|
TServiceClientPoolFactory(org.apache.thrift.TServiceClientFactory<org.apache.thrift.TServiceClient> clientFactory,
int timeout) |
| 限定符和类型 | 方法和说明 |
|---|---|
void |
destroyObject(ServerNode key,
T client)
销毁对象
|
T |
makeObject(ServerNode key)
生成对象
|
boolean |
validateObject(ServerNode key,
T client)
验证链接有效性
注意:在服务端口异常关闭的情况下, tp.isOpen()
仍然返回true,所以,正常情况下应该进行socket验证,考虑到服务异常时使用了deadmark算法切换服务,故这里就不需要下面的验证代码了。 |
public TServiceClientPoolFactory(org.apache.thrift.TServiceClientFactory<org.apache.thrift.TServiceClient> clientFactory,
int timeout)
clientFactory - timeout - public T makeObject(ServerNode key) throws Exception
makeObject 在接口中 org.apache.commons.pool.KeyedPoolableObjectFactory<ServerNode,T>makeObject 在类中 org.apache.commons.pool.BaseKeyedPoolableObjectFactory<ServerNode,T>Exceptionpublic void destroyObject(ServerNode key, T client) throws Exception
destroyObject 在接口中 org.apache.commons.pool.KeyedPoolableObjectFactory<ServerNode,T>destroyObject 在类中 org.apache.commons.pool.BaseKeyedPoolableObjectFactory<ServerNode,T>Exceptionpublic boolean validateObject(ServerNode key, T client)
tp.isOpen()
仍然返回true,所以,正常情况下应该进行socket验证,考虑到服务异常时使用了deadmark算法切换服务,故这里就不需要下面的验证代码了。
Socket socket = null;
try {
InetSocketAddress socketAddress = new InetSocketAddress(key.getIp(), key.getPort());
socket = new Socket();
socket.connect(socketAddress, 1000);
} catch (IOException e) {
LOGGER.warn(e.getMessage(), e);
return false;
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
LOGGER.warn(e.getMessage(), e);
}
}
}
validateObject 在接口中 org.apache.commons.pool.KeyedPoolableObjectFactory<ServerNode,T>validateObject 在类中 org.apache.commons.pool.BaseKeyedPoolableObjectFactory<ServerNode,T>Copyright © 2015 Baifendian Corporation. All rights reserved.