在上一篇文章中提到了Thrift的架构、传输协议(Ref),本篇文章将对Thrift的入门实例进行介绍。 分为如下5个部分: 运行环境、安装/配置、脚本文件、创建代码、运行程序。
一、开发环境(清单1)
1.操作系统
Server-Linux / Client-WinXP
2.SDK
Sun JDK1.5+
3.需要的jar依赖包
libthrift.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
log4j-1.2.15.jar
4.编译工具
Apache Ant & Apache ivy
二、安装/配置 (清单2)
1.下载thrift源文件
http://labs.renren.com/apache-mirror//incubator/thrift/0.5.0-incubating/thrift-0.5.0.tar.gz
2.编译thrift源文件
1)解压 thrift-0.5.0.tar.gz
2)用ant编译源代码,进入x:\thrift-0.5.0\lib\java目录,执行ant,通过ant中的ivy工具会自动从站点下载所需要的依赖包,编译完成后如图所示:
3)编译过程中下载的依赖包在x:\thrift-0.5.0\lib\java\build\ivy\lib 目录下可以看见下载的jar依赖包,将编译成功以后的jar包加入Eclipse的开发环境中。
三、脚本文件(清单3)
1.创建脚本
创建脚本文件 testJava.thrift ,脚本文件内容如下:
namespace java com.javabloger.gen.code # 注释1 定义生成代码的命名空间,与你需要定义的package相对应。
struct Blog { # 注释2.1 定义实体名称和数据结构,类似你业务逻辑中的pojo get/set
1: string topic # 注释2.2 参数类型可以参见 Thrift wiki
2: binary content
3: i64 createdTime
4: string id
5: string ipAddress
6: map<string,string> props
}
service ThriftCase { # 注释3 代码生成的类名,你的业务逻辑代码需要实现代码生成的ThriftCase.Iface接口
i32 testCase1(1:i32 num1, 2:i32 num2, 3:string num3) #注释4.1 方法名称和方法中的入参,入参类型参见wiki
list<string> testCase2(1:map<string,string> num1)
void testCase3()
void testCase4(1:list<Blog> blog) # 注释4.2 list 是thrift中基本数据类型中的一种,list中包含的Blog对象是上面struct中定义的
}
2.运行脚本
1)从 thrift 站点下载windows版本的编译工具,下载地址:http://labs.renren.com/apache-mirror//incubator/thrift/0.5.0-incubating/thrift-0.5.0.exe
2)通过Thrift的脚本文件,运行 thrift 命令创建生成的代码,例如:执行 thrift -gen java x:\testJava.thrift 命令,在当前运行的盘符下,可看见gen-java目录,在这里目录中可以看见生成的java代码,更多thrift 命令内容,请参见thrift命令自带的help。
3.Thrift 中的基本数据类型 (清单4)
类型 描述
bool true, false
byte 8位的有符号整数
i16 16位的有符号整数
i32 32位的有符号整数
i64 64位的有符号整数
double 64位的浮点数
string UTF-8编码的字符串
binary 字符数组
struct 结构体
list 有序的元素列表,类似于STL的vector
set 无序的不重复元素集,类似于STL的set
map key-value型的映射,类似于STL的map
exception 是一个继承于本地语言的exception基类
service 服务。包含多个函数接口(纯虚函数)
四、创建代码(清单5)
我将示例工程分了4个包,如下所示:
\com\javabloger
\client # 1.客户端测试代码
\gen\code # 2.通过脚本生成的class
\layer\transport # 3.服务器端代码和定义的传输协议
\layer\business # 4.具体的业务逻辑代码
具体代码内容这里就不阐述了,重点是要明白代码的结构和层次关系,其次是里面主要的几个类的含义,至于代码是怎么写的并不是非常重要,仅仅是我个人观点,仅供参考,谢谢。
代码示例的下载地址: http://javabloger-mini-books.googlecode.com/files/Thritf.zip
五、运行程序
先运行server,再运行client ,客户端向服务器端发送数据调用服务器端的4个方法,服务器端被传入客户端数据,运行效果如图所示:
分享到:
相关推荐
Apache Thrift is an open source cross language serialization and RPC framework. With support for over 15 programming languages, Apache Thrift can play an important role in a range of distributed ...
http://mikecvet.wordpress.com/2010/05/13/apache-thrift-tutorial-the-sequel/ http://chanian.com/2010/05/13/thrift-tutorial-a-php-client/ 原教程使用的是c++ server和php client. 我用c++和c#分别实现了...
maven-thrift-plugin-0.1.11-sources.jar
python库。 资源全名:thrift_pyi-0.2.0-py3-none-any.whl
本文借鉴spring对hessian的支持,实现spring对Thrift的支持。服务端主要使用了spring的HttpRequestHandler接口和RemoteExporter接口。HttpRequestHandler接口用于暴露http服务,这样就可以接受http的请求,这个如果...
Be a crackerjack at solving Apache Thrift-related issues. Table of Contents Chapter 1: Introducing Apache Thrift Chapter 2: Installing and Running Apache Thrift Chapter 3: Running Your First Apache ...
java代码使用thrift2操作hbase示例,thrift2连接hbase添加数据,单条查找,删除数据,根据扫描器查找,修改数据等测试实例
spring-cloud-starter-thrift包括客户端spring-cloud-starter-thrift-client和服务端spring-cloud-starter-thrift-server两个模块。服务端:支持Apache Thrift的各种原生服务线程模型,包括单线程阻塞模型(simple)、...
maven-thrift-plugin-0.1.11.jar
thrift 0.9.3 for vs2013/vs2015 直接打开 thrift-master-0.9.3\lib\cppVS2013\thrift.sln thrift-master-0.9.3\lib\cppVS2015\thrift.sln 编译即可
Thrift0.9.1 示例代码 Java版本 Thrift0.9.1 示例代码 Java版本
thrift入门教程+代码
Thrift作为可伸缩的跨语言服务开发框架,网上的资源较少,这里是一个简单的入门小程序,文件中的mylib下包含了依赖的jar包,并且在file目录下放了一个简单的thrift文件和生成thrift-0.9.0.exe工具,直接使用 thrift-...
Swift Maven插件从Swift兼容的Java代码生成节俭的IDL。用法将插件添加到pom的build plugins部分。 < build> < plugins> < plugin> < groupId>...
Thrift示例项目简介此项目,只为更好的理解存在的一种项目结构,如台州微信银行;thrift是一个软件框架,用来进行...java为thrift根据thrift定义文件,自动生成的java代码thrift -r --gen Java tutorial.thriftgen-node
python库,解压后可用。 资源全名:gunicorn_thrift-0.2.13-py2-none-any.whl
thrift-0.13.0-cp38-cp38-win_amd64
maven插件 maven-thrift-plugin-0.1.10
2.客户端使用连接池对服务调用进行管理,提升性能,这里我们使用Apache Commons项目commons-pool,可以大大减少代码的复杂度。 3.关于Failover/LoadBalance,由于zookeeper的watcher,当服务端不可用是及时通知...