Thrift 池
来源:互联网 发布:淘宝商城女装三件套 编辑:程序博客网 时间:2024/06/03 05:51
服务端
import org.apache.thrift.TProcessor;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.server.TNonblockingServer;import org.apache.thrift.server.TServer;import org.apache.thrift.transport.TFramedTransport;import org.apache.thrift.transport.TNonblockingServerSocket;import org.apache.thrift.transport.TTransportException;import com.whr.rpc.service.MessageForwardsService;public class MessageForwardsServer { public static MessageForwardsRpcInterface handler; @SuppressWarnings("rawtypes") public static MessageForwardsService.Processor processor; public static void start() { try { System.out.println("async TNonblockingServer start ...."); final TProcessor tprocessor = new MessageForwardsService.Processor<MessageForwardsService.Iface>( new MessageForwardsRpcInterface()); Runnable simple = new Runnable() { public void run() { simple(tprocessor); } }; new Thread(simple).start(); } catch (Exception e) { System.out.println("Server start error!!!"); e.printStackTrace(); } }// /**// * RPC 服务端// * @param processor// */ public static void simple(TProcessor tprocessor) { TNonblockingServerSocket tnbSocketTransport; try { tnbSocketTransport = new TNonblockingServerSocket(9090); TNonblockingServer.Args tnbArgs = new TNonblockingServer.Args( tnbSocketTransport); tnbArgs.processor(tprocessor); tnbArgs.transportFactory(new TFramedTransport.Factory()); tnbArgs.protocolFactory(new TCompactProtocol.Factory()); // 使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式 TServer server = new TNonblockingServer(tnbArgs); server.serve(); } catch (TTransportException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
客户端
pom.xml
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 --><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.3</version></dependency>
ControlCommand.java
import java.util.NoSuchElementException;import org.apache.commons.pool2.ObjectPool;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import org.apache.thrift.protocol.TProtocol;import com.whr.rpc.service.MessageForwardsService;/** * Hello world! * */public class ControlCommand { public static void main( String[] args ) { test("v2-1","192.10.200.203"); //test("v2-2","59.110.22.202"); } public static void test(String server,String ip){ GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); poolConfig.setMaxTotal(10); poolConfig.setMinIdle(1); poolConfig.setTestOnBorrow(true); ObjectPool<TProtocol> pool = new AutoClearGenericObjectPool<TProtocol>( new TProtocolFactory("192.10.200.203", 9090, true), poolConfig); TProtocol protocol; try { protocol = pool.borrowObject(); MessageForwardsService.Client client = new MessageForwardsService.Client(protocol); client.getAllChannels(); pool.returnObject(protocol); } catch (NoSuchElementException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
AutoClearGenericObjectPool.java
import org.apache.commons.pool2.PooledObjectFactory;import org.apache.commons.pool2.impl.GenericObjectPool;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;/** * Created by yangjunming on 6/7/16. */public class AutoClearGenericObjectPool<T> extends GenericObjectPool<T> { public AutoClearGenericObjectPool(PooledObjectFactory<T> factory) { super(factory); } public AutoClearGenericObjectPool(PooledObjectFactory<T> factory, GenericObjectPoolConfig config) { super(factory, config); } @Override public void returnObject(T obj) { super.returnObject(obj); //空闲数>=激活数时,清理掉空闲连接 if (getNumIdle() >= getNumActive()) { clear(); } }}
TProtocolFactory.java
import org.apache.commons.pool2.BasePooledObjectFactory;import org.apache.commons.pool2.PooledObject;import org.apache.commons.pool2.impl.DefaultPooledObject;import org.apache.thrift.protocol.TCompactProtocol;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 org.apache.thrift.transport.TTransportException;public class TProtocolFactory extends BasePooledObjectFactory<TProtocol> { private String host; private int port; private boolean keepAlive = true; public TProtocolFactory(String host, int port, boolean keepAlive) { this.host = host; this.port = port; this.keepAlive = keepAlive; } @Override public TProtocol create() throws TTransportException { TSocket tSocket = new TSocket(host, port); TTransport tTransport = new TFramedTransport(tSocket); tTransport.open(); return new TCompactProtocol(tTransport); } @Override public PooledObject<TProtocol> wrap(TProtocol protocol) { return new DefaultPooledObject<TProtocol>(protocol); } /** * 对象钝化(即:从激活状态转入非激活状态,returnObject时触发) * * @param pooledObject * @throws TTransportException */ @Override public void passivateObject(PooledObject<TProtocol> pooledObject) throws TTransportException { if (!keepAlive) { pooledObject.getObject().getTransport().flush(); pooledObject.getObject().getTransport().close(); } } /** * 对象激活(borrowObject时触发) * * @param pooledObject * @throws TTransportException */ @Override public void activateObject(PooledObject<TProtocol> pooledObject) throws TTransportException { if (!pooledObject.getObject().getTransport().isOpen()) { pooledObject.getObject().getTransport().open(); } } /** * 对象销毁(clear时会触发) * @param pooledObject * @throws TTransportException */ @Override public void destroyObject(PooledObject<TProtocol> pooledObject) throws TTransportException { passivateObject(pooledObject); pooledObject.markAbandoned(); } /** * 验证对象有效性 * * @param p * @return */ @Override public boolean validateObject(PooledObject<TProtocol> p) { if (p.getObject() != null) { if (p.getObject().getTransport().isOpen()) { return true; } try { p.getObject().getTransport().open(); return true; } catch (TTransportException e) { e.printStackTrace(); } } return false; }}
阅读全文
0 0
- Thrift 池
- Thrift连接池实现
- Thrift 线程池
- thrift连接池问题
- Thrift连接池优化
- Thrift连接池实现
- 自定义Thrift连接池
- Thrift
- thrift
- thrift
- thrift
- Thrift
- Thrift
- thrift
- thrift
- thrift
- Thrift
- thrift
- Msql优化那些事儿
- Android音乐播放器-热门榜单
- css垂直剧中解决方案
- 欢迎使用CSDN-markdown编辑器
- C++学习笔记
- Thrift 池
- Spring使用BeanName视图产生PDF视图
- 集合框架—Map集合
- iOS 应用获取最上层全屏 Window 的正确方法
- YII2.0 表单组件的使用方法
- VS2013编译错误:未处理FileLoadException
- Yii Html::a 当参数是数组的时候
- fridge11_28:Git的安装和使用
- Springboot之输出json数据