Thrift-java实例
原文出自【听云技术博客】:http://blog.tingyun.com/web/a...
Thrift实例1
功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法。
源码截图(源码在附件中):
客户端:
TestThriftClientServlet:
SendRequestController:
Pom.xml:
服务端:
TestThriftServlet:
ThriftServerController:
IThriftServer:由thrift工具编译生成
ThriftServerServiceImpl:
运行说明:先运行服务端TestThriftServlet,再运行客户端TestThriftClientServlet,观察控制台打印出81,即:77+5=81
Thrift实例2
1、业务逻辑描述:一个系统通过用户身份证号获取另一个系统里有关这个用户的积分。
2、首先编写脚本文件test.thrift:
命名空间:
namespace java com.test
namespace是关键字表示命名空间,也就是java的包,java表示脚本转换成java类
请求:identitycard是身份证号
struct UserRequest{1:string identitycard}
返回:code是成功标识 0表示成功;integral是用户拥有的积分
Params是返回的参数集合这里只用一个字段积分(integral)做例子;
struct UserResponse{1:string code2:map params}
服务:
service ThriftCase{UserResponse integralService(1: UserRequest request)}
3、到thrift官网下载
下载:thrift-0.6.1.tar.gz和Thrift compiler for Windows (thrift-0.6.1.exe)
4、用eclips里面的ant工具把thrift-0.6.1编译出jar包
解压:thrift-0.6.1.tar.gz
把解压后的文件夹放到eclipse的某个工程下如图:
如上图thrift-0.6.1文件夹放在名字是thrift的java工程的src下,有红叉不必管他,然后进入到thrift-0.6.1/lib/java中,右键点击build.xml
如图点击Ant Build。在build.xml同路径下会产生一个build文件夹里面有生成的thrift-0.6.1.jar包。把这个包放到所做的工程的lib里就行了。
5、把thrift脚本编译成java类
把thrift-0.6.1.exe和test.thrift文件放在同一个目录下并把路径写进环境变量Path中,如:E:/soft/ccc/路径下放入上述两个文件并把路径写进环境变量Path中。
在运行中键入cmd打开dos界面,进到E:/soft/ccc/路径下,执行thrift-0.6.1.exe文件,命令如下:
E:softccc>Thrift-0.6.1 –gen java text.thrift
在这个目录下会产生一个gen-java文件夹,文件夹中会产生相应的java类,
ThriftCase.java
UserRequest.java
UserResponse.java
将三个文件拷贝到thrift工程的src/com/test/ 路径下。
6、编写服务端代码
服务端代码包含两个类:一个是业务逻辑类,一个是socket服务类。
业务逻辑类要实现ThriftCase.Iface服务接口
package com.test;import java.util.HashMap;import java.util.Map;public class ThriftCaseImpl implements ThriftCase.Iface{public UserResponse integralService(UserRequest request) {try{UserResponse urp=new UserResponse();if(request.identitycard.equals("32010619881231103X")){urp.setCode("0");Map params=new HashMap();params.put("integral", "10");urp.setParams(params);}System.out.print("接收参数是:identitycard="+request.identitycard);return urp;}catch(Exception e){e.printStackTrace();}return null;}}
Socket服务类
package com.test;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TBinaryProtocol.Factory;import org.apache.thrift.server.TServer;import org.apache.thrift.server.TThreadPoolServer;import org.apache.thrift.server.TThreadPoolServer.Args;import org.apache.thrift.transport.TServerSocket;import org.apache.thrift.transport.TTransportException;public class TestService {private void start(){try {TServerSocket serverTransport = new TServerSocket(8899);ThriftCase.Processor processor = new ThriftCase.Processor(new ThriftCaseImpl());//TBinaryProtocol – 二进制编码格式进行数据传输。Factory protFactory = new TBinaryProtocol.Factory(true,true);//TCompactProtocol 这种协议非常有效的,使用Variable-Length Quantity (VLQ) 编码对数据进行压缩//Factory protFactory = new TCompactProtocol.Factory();Args args = new Args(serverTransport);args.processor(processor);args.protocolFactory(protFactory);TServer server = new TThreadPoolServer(args);System.out.println("Starting server on port 8899 ...");server.serve();} catch (TTransportException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {// TODO Auto-generated method stubTestService srv = new TestService();srv.start();}}
7、客户端代码
package com.test;import org.apache.thrift.TException;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;import org.apache.thrift.transport.TTransportException;import com.test.ThriftCase.Client;public class TestClient {private void start() { TTransport transport; try { transport = new TSocket("localhost", 8899); TProtocol protocol = new TBinaryProtocol(transport); Client client = new Client(protocol); UserRequest request=new UserRequest(); request.setIdentitycard("32010619881231103X"); transport.open(); com.test.UserResponse urp=client.integralService(request); if(urp.code!=null&&!urp.code.equals("")){ System.out.println("返回代码:"+urp.code+"; 参数是:"+urp.params.get("integral")); } transport.close(); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { e.printStackTrace(); } } public static void main(String[] args) { TestClient c = new TestClient(); c.start(); }}
8、先开启服务
public static void main(String[] args) {// TODO Auto-generated method stubTestService srv = new TestService();srv.start();}控制台显示:Starting server on port 8899 ...
9、再运行客户端
public static void main(String[] args) { TestClient c = new TestClient(); c.start(); }
控制台显示:
返回代码:0; 参数是:10
10、所需第三方包
log4j-1.2.15,
slf4j-api-1.6.1.jar
slf4j-log4j12-1.5.8.jar
关键字:thrift
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!