Thrift-java实例

发布时间:2019-11-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Thrift-java实例脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

原文出自【听博客】:http://blog.tingyun.com/web/a...

Thrift实例1

功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法。

码截图(源码在附件中):

客户端:

testThriftClientServlet:

Thrift-java实例

SendRequestController:

Thrift-java实例

Pom.XMl:

Thrift-java实例

服务端:

TestThriftServlet

Thrift-java实例

ThriftServerController:

Thrift-java实例

IThriftServer:由thrift工具编译生成

Thrift-java实例

ThriftServerServiceimpl:

Thrift-java实例

运行说明:先运行服务端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 code 2:map<string,string> params } 

服务:

service ThriftCase { UserResponse integralService(1: UserRequest request) } 

3、到thrift官网下载

http://thrift.apache.org/

下载: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-java实例


如上图thrift-0.6.1文件夹放在名字是thrift的java工程的src下,有红叉不必管他,然后进入到thrift-0.6.1/lib/java中,右键点击build.xML

Thrift-java实例

如图点击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 stub TestService 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 stub TestService 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-java实例全部内容,希望文章能够帮你解决Thrift-java实例所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。