資源簡(jiǎn)介
對(duì)于Thrift服務(wù)化的改造,主要是客戶端,可以從如下幾個(gè)方面進(jìn)行:
1.服務(wù)端的服務(wù)注冊(cè),客戶端自動(dòng)發(fā)現(xiàn),無(wú)需手工修改配置,這里我們使用zookeeper,但由于zookeeper本身提供的客戶端使用較為復(fù)雜,因此采用curator-recipes工具類進(jìn)行處理服務(wù)的注冊(cè)與發(fā)現(xiàn)。
2.客戶端使用連接池對(duì)服務(wù)調(diào)用進(jìn)行管理,提升性能,這里我們使用Apache Commons項(xiàng)目commons-pool,可以大大減少代碼的復(fù)雜度。
3.關(guān)于Failover/LoadBalance,由于zookeeper的watcher,當(dāng)服務(wù)端不可用是及時(shí)通知客戶端,并移除不可用的服務(wù)節(jié)點(diǎn),而LoadBalance有很多算法,這里我們采用隨機(jī)加權(quán)方式,也是常有的負(fù)載算法,至于其他的算法介紹參考:常見(jiàn)的負(fù)載均衡的基本算法。

代碼片段和文件信息
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之前執(zhí)行
void?destroy(TServiceClient?client);
//?創(chuàng)建成功是執(zhí)行
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;
}
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????2578??2015-03-07?21:36??src\main\java\cn\slimsmart\thrift\rpc\ThriftClientPoolFactory.java
?????文件????????419??2015-03-07?16:41??src\main\java\cn\slimsmart\thrift\rpc\ThriftException.java
?????文件???????3442??2015-03-07?23:34??src\main\java\cn\slimsmart\thrift\rpc\ThriftServiceClientProxyFactory.java
?????文件???????4633??2015-03-08?00:23??src\main\java\cn\slimsmart\thrift\rpc\ThriftServiceServerFactory.java
?????文件???????2338??2015-03-08?00:25??src\main\java\cn\slimsmart\thrift\rpc\zookeeper\FixedAddressProvider.java
?????文件????????599??2015-03-07?22:45??src\main\java\cn\slimsmart\thrift\rpc\zookeeper\ThriftServerAddressProvider.java
?????文件???????6033??2015-03-08?00:26??src\main\java\cn\slimsmart\thrift\rpc\zookeeper\ThriftServerAddressProviderZookeeper.java
?????文件????????468??2015-03-07?17:05??src\main\java\cn\slimsmart\thrift\rpc\zookeeper\ThriftServerAddressRegister.java
?????文件???????1811??2015-03-07?23:07??src\main\java\cn\slimsmart\thrift\rpc\zookeeper\ThriftServerAddressRegisterZookeeper.java
?????文件???????1662??2015-03-08?00:41??src\main\java\cn\slimsmart\thrift\rpc\zookeeper\ThriftServerIpLocalNetworkResolve.java
?????文件????????474??2015-03-07?16:49??src\main\java\cn\slimsmart\thrift\rpc\zookeeper\ThriftServerIpResolve.java
?????文件???????2536??2015-03-07?23:09??src\main\java\cn\slimsmart\thrift\rpc\zookeeper\ZookeeperFactory.java
?????文件????????100??2015-03-07?22:19??src\main\resources\EchoSerivce.thrift
?????文件???????1867??2015-03-08?00:07??src\test\java\cn\slimsmart\thrift\rpc\demo\Client.java
?????文件??????33241??2015-03-07?22:20??src\test\java\cn\slimsmart\thrift\rpc\demo\EchoSerivce.java
?????文件????????255??2015-03-07?22:29??src\test\java\cn\slimsmart\thrift\rpc\demo\EchoSerivceImpl.java
?????文件????????392??2015-03-07?23:25??src\test\java\cn\slimsmart\thrift\rpc\demo\Server.java
?????文件????????337??2015-03-01?21:18??src\test\resources\log4j.properties
?????文件???????2558??2015-03-08?00:20??src\test\resources\spring-context-thrift-client.xm
?????文件???????2738??2015-03-08?00:23??src\test\resources\spring-context-thrift-server.xm
?????文件???????1419??2015-03-07?16:23??pom.xm
?????文件????????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??src\main\java\cn\slimsmart\thrift\rpc\zookeeper
?????目錄??????????0??2015-03-07?22:51??src\test\java\cn\slimsmart\thrift\rpc\demo
?????目錄??????????0??2015-03-07?22:19??src\main\java\cn\slimsmart\thrift\rpc
?????目錄??????????0??2015-03-07?21:39??src\test\java\cn\slimsmart\thrift\rpc
?????目錄??????????0??2015-03-07?15:44??src\main\java\cn\slimsmart\thrift
?????目錄??????????0??2015-03-07?21:39??src\test\java\cn\slimsmart\thrift
?????目錄??????????0??2015-03-07?15:44??src\main\java\cn\slimsmart
............此處省略13個(gè)文件信息
評(píng)論
共有 條評(píng)論