Spring集成Thrift,实现服务端和客户端代理
来源:互联网 发布:给淘宝店铺添加客服 编辑:程序博客网 时间:2024/05/18 03:54
基于反射实现Thrift的服务注册和客户端调用的代理端,并结合前几节的HelloWorld接口、实现类以及连接池。
1.服务端代理
ThriftServerProxy.java
package cn.slimsmart.thrift.demo.proxy;import java.lang.reflect.Constructor;import org.apache.thrift.TProcessor;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.server.TServer;import org.apache.thrift.server.TThreadPoolServer;import org.apache.thrift.transport.TServerSocket;import org.apache.thrift.transport.TTransportException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;//服务端代理public class ThriftServerProxy {private final Logger logger = LoggerFactory.getLogger(getClass());private int port;// 端口private String serviceInterface;// 实现类接口private Object serviceImplObject;// 实现类@SuppressWarnings({ "unchecked", "rawtypes" })public void start() {new Thread() {@Overridepublic void run() {try {TServerSocket serverTransport = new TServerSocket(getPort());// 实现类处理类classClass Processor = Class.forName(getServiceInterface() + "$Processor");// 接口Class Iface = Class.forName(getServiceInterface() + "$Iface");// 接口构造方法类Constructor con = Processor.getConstructor(Iface);// 实现类处理类TProcessor processor = (TProcessor) con.newInstance(serviceImplObject);TBinaryProtocol.Factory protFactory = new TBinaryProtocol.Factory(true, true);TThreadPoolServer.Args args = new TThreadPoolServer.Args(serverTransport);args.protocolFactory(protFactory);args.processor(processor);TServer server = new TThreadPoolServer(args);logger.info("Starting server on port " + getPort() + " ...");System.out.println("Starting server on port " + getPort() + " ...");server.serve();} catch (TTransportException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}}.start();}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public String getServiceInterface() {return serviceInterface;}public void setServiceInterface(String serviceInterface) {this.serviceInterface = serviceInterface;}public Object getServiceImplObject() {return serviceImplObject;}public void setServiceImplObject(Object serviceImplObject) {this.serviceImplObject = serviceImplObject;}}2.服务端spring配置
proxy/applicationContext-server.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"default-lazy-init="true"><description>thrift配置文件 </description><bean id="helloWorldImpl" class="cn.slimsmart.thrift.demo.helloworld.HelloWorldImpl" /><!-- 服务端注册 --><bean id="helloWorld" class="cn.slimsmart.thrift.demo.proxy.ThriftServerProxy"><property name="port" value="8080" /><property name="serviceInterface" value="cn.slimsmart.thrift.demo.helloworld.HelloWorld" /><property name="serviceImplObject" ref="helloWorldImpl" /></bean></beans>
3.服务端启动类
ServerTest.java
package cn.slimsmart.thrift.demo.proxy;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.slimsmart.thrift.demo.proxy.ThriftServerProxy;public class ServerTest {@SuppressWarnings("resource")public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("classpath:proxy/applicationContext-server.xml");ThriftServerProxy thriftServerProxy = (ThriftServerProxy) context.getBean(ThriftServerProxy.class);thriftServerProxy.start();}}
4.客户端代理
ThriftClientProxy.java
package cn.slimsmart.thrift.demo.proxy;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TTransport;import cn.slimsmart.thrift.demo.pool.ConnectionManager;//客户端代理@SuppressWarnings({ "rawtypes", "unchecked" })public class ThriftClientProxy {private ConnectionManager connectionManager;public ConnectionManager getConnectionManager() {return connectionManager;}public void setConnectionManager(ConnectionManager connectionManager) {this.connectionManager = connectionManager;}public Object getClient(Class clazz) {Object result = null;try {TTransport transport = connectionManager.getSocket();TProtocol protocol = new TBinaryProtocol(transport);Class client = Class.forName(clazz.getName() + "$Client");Constructor con = client.getConstructor(TProtocol.class);result = con.newInstance(protocol);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}return result;}}
5.客户端spring配置
proxy/applicationContext-client.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"default-lazy-init="true"><description>thrift配置文件 </description><!-- 连接池配置 --><bean id="connectionProvider" class="cn.slimsmart.thrift.demo.pool.ConnectionProviderImpl"><property name="serviceIP" value="127.0.0.1" /><property name="servicePort" value="8080" /><property name="maxActive" value="10" /><property name="maxIdle" value="10" /><property name="testOnBorrow" value="true" /><property name="testOnReturn" value="true" /><property name="testWhileIdle" value="true" /><property name="conTimeOut" value="2000" /></bean><bean id="connectionManager" class="cn.slimsmart.thrift.demo.pool.ConnectionManager"><property name="connectionProvider" ref="connectionProvider"/></bean><bean id="thriftClientProxy" class="cn.slimsmart.thrift.demo.proxy.ThriftClientProxy"><property name="connectionManager" ref="connectionManager"/></bean></beans>
6.客户端启动类
ClientTest.java
package cn.slimsmart.thrift.demo.proxy;import org.apache.thrift.TException;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.slimsmart.thrift.demo.helloworld.HelloWorld;import cn.slimsmart.thrift.demo.proxy.ThriftClientProxy;public class ClientTest {@SuppressWarnings("resource")public static void main(String[] args) throws TException {ApplicationContext context = new ClassPathXmlApplicationContext("classpath:proxy/applicationContext-client.xml");ThriftClientProxy thriftClientProxy = (ThriftClientProxy) context.getBean(ThriftClientProxy.class);HelloWorld.Iface client = (HelloWorld.Iface)thriftClientProxy.getClient(HelloWorld.class);System.out.println(client.sayHello("Jack"));}}
0 0
- Spring集成Thrift,实现服务端和客户端代理
- Thrift学习笔记(6)--Spring集成Thrift,实现服务端和客户端代理
- java实现Thrift服务端和客户端
- Thrift 各种服务端和客户端实现
- Thrift交流(二)thrift服务端和客户端实现 Nifty
- Thrift交流(二)thrift服务端和客户端实现 Nifty
- Thrift交流(二)thrift服务端和客户端实现 Nifty
- Android和C#实现Thrift服务端和客户端
- Thrift和Spring集成
- 用thrift实现客户端和服务端的C++代码
- CXF实现服务端和客户端集成
- thrift JAVA服务端 python客户端的实现
- thrift JAVA服务端 python客户端的实现
- C#实现Thrift服务端与客户端
- Android实现Thrift服务端与客户端
- Spring利用代理,完成RMI服务端和客户端的开发
- Thrift动态代理客户端
- CXF和Spring整合实现WebService服务端、客户端
- 表控件 TableView
- 【Codevs1421】【树上DP】【博弈论】秋静叶&秋穰子
- 3D打印技术之切片引擎(3)
- 克隆虚拟机win8系统后注意修改安全标识(SID)
- 解决eclipse使用Python插件程序乱码问题
- Spring集成Thrift,实现服务端和客户端代理
- 程序人生之如何正确的评估自己的薪资
- iOS 根据文字内容设置cell 的高度
- STL之sort和for_each的用法
- ie主页修改
- Android基站定位——通过手机信号获取基站信息
- activity启动模式笔记
- wav转amr以及简单调整音量
- bzoj 3877: [Ahoi2014]保龄球