原文出自【听云技术博客】:http://blog.tingyun.com/web/article/detail/1082
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 code 2:map<string,string> 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:\soft\ccc\>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是什么?什么情况下使用thrift Thrift 基础架构 Thrift脚本的数据类型,协议,传输层 Thrift运用实例
Thrift入门及Java实例演示,文档及java演示源代码。包括thrift-0.11.0.exe
主要是对thrift0.9.0 TSimpleServer、TThreadPoolServer 、TNonblockingServer、THsHaServer等服务模型实例和AsynClient 异步客户端实例代码的演示
Thrift java demo实例,通过简单的例子,帮助初学者理解Thrift
java代码使用thrift2操作hbase示例,thrift2连接hbase添加数据,单条查找,删除数据,根据扫描器查找,修改数据等测试实例
thrift属于facebook.com技术核心框架之一,使用不同开发语言开发的系统可以通过该框架实现彼此间的通讯,开发者只需编辑一份thrift脚本,即可自动获得其它开发语言的代码(比如 c++ java python ruby c# haskell ...
使用 Apache commons-pool2 的 Thrift 连接池的实现。 此实现创建 TSocket 的实例并将它们池化。 以下代码片段显示了如何创建 TSocketProvider 的实例 GenericObjectPoolConfig config = new ...
RPC(Remote Procedure Call Protocol)远程过程调用协议实例,学习和使用thrift无痛入门代码。具体使用方法,可以看博客详解。
使用Apache thrift通信框架编写的一个实例,以及提供开发中使用thrift所需的jar包
thrift使用的一个简单的例子,有助于初学者对thrift的理解和使用。
新来的一个工程师不懂HBase,java不熟,python还行,我建议他那可以考虑用HBase的thrift调用,完成目前的工作。 首先,安装thrift 下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz 这个版本 tar xzf thrift-...
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。接下来通过本文给大家介绍Java thrift服务器和客户端创建实例代码,需要的朋友参考下吧
本文只是简单的讲解Thrift开源框架的安装和简单使用示例,对于详细的讲解,后面在进行阐述。 ...Thrift 的跨语言性体现在,它可以生成C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, C
基于hadoop的Hive数据仓库JavaAPI简单调用的实例,关于Hive的简介在此不赘述。hive提供了三种用户接口:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令行 JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似 Web...
代理实例这是Accumulo Instance应用程序编程接口(API)的实现,该接口使用Accumulo提供的基于Apache Thrift的代理服务器作为与Accumulo实例进行通信的后端。 有关更多信息,请参见《 。
1.Spark及其生态圈简介.pdf 2.Spark编译与部署(上)--基础环境搭建.pdf 2.Spark编译与部署(下)--Spark编译安装.pdf ...9.SparkGraphX介绍及实例.pdf 10.分布式内存文件系统Tachyon介绍及安装部署.pdf
多进程 zeppelin 解释器的 PoC ...在当前版本中,Zeppelin 中的 Thrift 客户端使用 Interpreter 实例拉取Thrift 服务器 快速开始: #build ./gradlew build #manually start interpreter java -jar .
20_通过Apache Thrift实现Java与Python的RPC调用;21_gRPC深入详解 ;22_gRPC实践 ;23_Gradle Wrapper在Gradle项目构建中的最佳实践;24_gRPC整合Gradle与代码生成············82_Netty引用计数原子...
14_Protobuf完整实例详解 15_Protobuf集成Netty与多协议消息传 递 16_Protobuf多协议消息支援与工程最佳实践 17_Protobuf使用最佳实践与Apache Thrift介绍 18_Apache Thrift应用详解与实例剖析 19_Apache Thrift原理...
使用Apache Thrift的简单聊天服务 #由...制作: 约书亚(Joshua Bezaleel)Abednego(13512013) 穆罕默德·雷扎(Muhammad Reza Irvanda)(13512042) #Requires Java开发工具包1.8 #安装说明 打开您的IDE...