thrift-zookeeper-rpc


对于Thrift服务化的改造,主要是客户端,可以从如下几个方面进行: 1.服务端的服务注册,客户端自动发现,无需手工修改配置,这里我们使用zookeeper,但由于zookeeper本身提供的客户端使用较为复杂,因此采用curator-recipes工具类进行处理服务的注册与发现。 2.客户端使用连接池对服务调用进行管理,提升性能,这里我们使用Apache Commons项目commons-pool,可以大大减少代码的复杂度。 3.关于Failover/LoadBalance,由于zookeeper的watcher,当服务端不可用是及时通知客户端,并移除不可用的服务节点,而LoadBalance有很多算法,这里我们采用随机加权方式,也是常有的负载算法,至于其他的算法介绍参考:常见的负载均衡的基本算法。
资源截图
代码片段和文件信息
package cn.slimsmart.thrift.rpc;

import java.net.InetSocketAddress;

import org.apache.commons.pool.basePoolableobjectFactory;
import org.apache.thrift.TServiceClient;
import org.apache.thrift.TServiceClientFactory;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TframedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

import cn.slimsmart.thrift.rpc.zookeeper.ThriftServerAddressProvider;

/**
 * 连接池thrift-client for spring
 */
public class ThriftClientPoolFactory extends basePoolableobjectFactory {

private final ThriftServerAddressProvider serverAddressProvider;
private final TServiceClientFactory clientFactory;
private PoolOperationCallBack callback;

protected ThriftClientPoolFactory(ThriftServerAddressProvider addressProvider TServiceClientFactory clientFactory) throws Exception {
this.serverAddressProvider = addressProvider;
this.clientFactory = clientFactory;
}

protected ThriftClientPoolFactory(ThriftServerAddressProvider addressProvider TServiceClientFactory clientFactory
PoolOperationCallBack callback) throws Exception {
this.serverAddressProvider = addressProvider;
this.clientFactory = clientFactory;
this.callback = callback;
}

static interface PoolOperationCallBack {
// 销毁client之前执行
void destroy(TServiceClient client);

// 创建成功是执行
void make(TServiceClient client);
}

public void destroyobject(TServiceClient client) throws Exception {
if (callback != null) {
try {
callback.destroy(client);
} catch (Exception e) {
//
}
}
TTransport pin = client.getInputProtocol().getTransport();
pin.close();
}

public boolean validateobject(TServiceClient client) {
TTransport pin = client.getInputProtocol().getTransport();
return pin.isOpen();
}

@Override
public TServiceClient makeobject() throws Exception {
InetSocketAddress address = serverAddressProvider.selector();
TSocket tsocket = new TSocket(address.getHostName() address.getPort());
TTransport transport = new TframedTransport(tsocket);
TProtocol protocol = new TBinaryProtocol(transport);
TServiceClient client = this.clientFactory.getClient(protocol);
transport.open();
if (callback != null) {
try {
callback.make(client);
} catch (Exception e) {
//
}
}
return client;
}

}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2578  2015-03-07 21:36  srcmainjavacnslimsmart hrift
pcThriftClientPoolFactory.java

     文件        419  2015-03-07 16:41  srcmainjavacnslimsmart hrift
pcThriftException.java

     文件       3442  2015-03-07 23:34  srcmainjavacnslimsmart hrift
pcThriftServiceClientProxyFactory.java

     文件       4633  2015-03-08 00:23  srcmainjavacnslimsmart hrift
pcThriftServiceServerFactory.java

     文件       2338  2015-03-08 00:25  srcmainjavacnslimsmart hrift
pczookeeperFixedAddressProvider.java

     文件        599  2015-03-07 22:45  srcmainjavacnslimsmart hrift
pczookeeperThriftServerAddressProvider.java

     文件       6033  2015-03-08 00:26  srcmainjavacnslimsmart hrift
pczookeeperThriftServerAddressProviderZookeeper.java

     文件        468  2015-03-07 17:05  srcmainjavacnslimsmart hrift
pczookeeperThriftServerAddressRegister.java

     文件       1811  2015-03-07 23:07  srcmainjavacnslimsmart hrift
pczookeeperThriftServerAddressRegisterZookeeper.java

     文件       1662  2015-03-08 00:41  srcmainjavacnslimsmart hrift
pczookeeperThriftServerIpLocalNetworkResolve.java

     文件        474  2015-03-07 16:49  srcmainjavacnslimsmart hrift
pczookeeperThriftServerIpResolve.java

     文件       2536  2015-03-07 23:09  srcmainjavacnslimsmart hrift
pczookeeperookeeperFactory.java

     文件        100  2015-03-07 22:19  srcmain
esourcesEchoSerivce.thrift

     文件       1867  2015-03-08 00:07  src estjavacnslimsmart hrift
pcdemoClient.java

     文件      33241  2015-03-07 22:20  src estjavacnslimsmart hrift
pcdemoEchoSerivce.java

     文件        255  2015-03-07 22:29  src estjavacnslimsmart hrift
pcdemoEchoSerivceImpl.java

     文件        392  2015-03-07 23:25  src estjavacnslimsmart hrift
pcdemoServer.java

     文件        337  2015-03-01 21:18  src est
esourceslog4j.properties

     文件       2558  2015-03-08 00:20  src est
esourcesspring-context-thrift-client.xml

     文件       2738  2015-03-08 00:23  src est
esourcesspring-context-thrift-server.xml

     文件       1419  2015-03-07 16:23  pom.xml

     文件        132  2015-03-07 22:19  thrift.bat

     文件    4889088  2015-03-07 13:14  thrift-0.9.2.exe

     目录          0  2015-03-07 21:29  srcmainjavacnslimsmart hrift
pczookeeper

     目录          0  2015-03-07 22:51  src estjavacnslimsmart hrift
pcdemo

     目录          0  2015-03-07 22:19  srcmainjavacnslimsmart hrift
pc

     目录          0  2015-03-07 21:39  src estjavacnslimsmart hrift
pc

     目录          0  2015-03-07 15:44  srcmainjavacnslimsmart hrift

     目录          0  2015-03-07 21:39  src estjavacnslimsmart hrift

     目录          0  2015-03-07 15:44  srcmainjavacnslimsmart

............此处省略13个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)