thrift使用实例
来源:互联网 发布:arm单片机仿真软件 编辑:程序博客网 时间:2024/05/02 14:07
thrift是一个RPC框架,最初由Facebook开发,后来移交apache组织管理。这里用thrift写了一个最简单的例子,服务器和客户端都用java,供大家参考。
0. 下载thrift
首先需要下载thrift编译器,它把thrift定义编译成对应语言。在thrift官网上有下载http://thrift.apache.org/download
这里我下载的是
Thrift compiler for Windows (thrift-0.9.2.exe)
1. 定义接口
test.thrift:
service TestService { void log(1:string text); i32 add(1:i32 a,2:i32 b);}
总体上看,thrift接口定义文件与c++语言是比较类似的。有几点需要注意的说明一下:
- 接口都定义在service中
- 函数的参数需要标示出他们的位置,否则在生成代码时会有警告:
No field key specified for text, resulting protocol may have conflicts or not be backwards compatible!
- thrift定义了一套类型系统:
- bool: A boolean value (true or false)
- byte: An 8-bit signed integer
- i16: A 16-bit signed integer
- i32: A 32-bit signed integer
- i64: A 64-bit signed integer
- double: A 64-bit floating point number
- string: A text string encoded using UTF-8 encoding
2. 生成代码
thrift官方支持如下这些语言,你自己也可以让自己的语言支持thrift,官网有相关文档
- Actionscript 3.0
- C++
- CSharp
- D
- Delphi
- Go
- Graphviz
- Haxe Framework
- Haskell
- Java
- Javascript
- Node.js
- OCaml
- Perl
- PHP
- Python
- Ruby
这里我使用的是java语言。在test.thrift的目录运行命令:
thrift -r --gen java test.thrift
就会在当前目录生成一个gen-java文件夹,其中有一个TestService.java
3. 下载thrift的java库
thrift对每个支持的语言都实现了支持库,官网上只提供了源码,需要自己编译,这里我们直接去maven仓库上下载。
这里推荐一个网站mvnrepository,可以搜索java库,而且有对应的maven,ant,gradle代码可以直接复制使用。
搜索thrift可以找到这个页面:
http://www.mvnrepository.com/artifact/org.apache.thrift/libthrift/0.9.2
可以写一个ant和ivy脚本:
build.xml:
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="ThriftTest" default="resolve"> <target name="resolve"> <ivy:retrieve /> </target></project>
ivy.xml:
<ivy-module version="2.0"> <info organisation="" module="ThriftTest"/> <dependencies> <dependency org="org.apache.thrift" name="libthrift" rev="0.9.2"/> <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.7"/> </dependencies></ivy-module>
在当前目录运行ant
,就会在lib目录中下载thrift以及它所依赖的库。
commons-codec-1.6.jarcommons-logging-1.1.1.jarhttpclient-4.2.5.jarhttpcore-4.2.4.jarlibthrift-0.9.2.jarlibthrift-0.9.2-javadoc.jarlog4j-1.2.17.jarservlet-api-2.5.jarslf4j-api-1.5.8.jarslf4j-api-1.7.7.jarslf4j-log4j12-1.7.7.jarslf4j-log4j12-1.7.7-javadoc.jarslf4j-log4j12-1.7.7-sources.jar
注意一点:把slf4j-api-1.5.8.jar删掉,这里我们该用新版的sl4j
你也可以下载我打包的lib(下载地址)
4. 新建eclipse工程
新建eclipse工程,并把TestService.java复制进来,还有lib目录也复制进来。
在eclipse中刷新工程,点开lib目录,把所有jar加入build path:
5. 编写Handler类
你需要实现之前定义的接口,java语言中的做法是实现xxx.Iface,xxx是你定义的service名。
TestServiceHandler.java
import org.apache.thrift.TException;public class TestServiceHandler implements TestService.Iface{ @Override public void log(String text) throws TException { System.out.println(text); } @Override public int add(int a, int b) throws TException { return a+b; }}
6. 编写Server
Server.java:
import org.apache.thrift.server.TServer;import org.apache.thrift.server.TServer.Args;import org.apache.thrift.server.TSimpleServer;import org.apache.thrift.transport.TServerSocket;import org.apache.thrift.transport.TServerTransport;import org.apache.thrift.transport.TTransportException;public class Server { public static void main(String[] args) { TestServiceHandler handler = new TestServiceHandler(); TestService.Processor<TestServiceHandler> processor = new TestService.Processor<TestServiceHandler>(handler); try { TServerTransport serverTransport = new TServerSocket(8080); TServer server = new TSimpleServer(new Args(serverTransport).processor(processor)); server.serve(); } catch (TTransportException e) { e.printStackTrace(); } }}
7. 编写Client
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;public class Client { public static void main(String[] args) { TTransport transport = new TSocket("localhost", 8080); try { transport.open(); TProtocol protocol = new TBinaryProtocol(transport); TestService.Client client = new TestService.Client(protocol); client.log("begin"); System.out.println(client.add(1,2)); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { e.printStackTrace(); } }}
8. 运行
先运行Server,然后运行Client,可以看到Server的控制台输出begin
,Client控制台输出3
参考资料
- Apache Thrift - Java
- http://thrift.apache.org/tutorial/java
- Thrift使用实例
- thrift 使用实例
- thrift使用实例
- Thrift 原理与使用实例
- Thrift 原理与使用实例
- Thrift Java使用实例(修改版)
- Thrift实例
- thrift 实例
- thrift实例
- thrift使用
- Thrift使用
- 使用C#和Thrift来访问Hbase实例
- 使用C#和Thrift来访问Hbase实例
- 使用C#和Thrift来访问Hbase实例
- Thrift 实例 Helloworld
- Thrift 实例 Helloworld
- thrift入门实例
- thrift简单实例
- [转]jedis-2.4.1 中的JedisPoolConfig没MaxActive属性!!!
- JQUERY解析XML
- [Android Studio] Android studio 多渠道打包(超简洁版)
- JFreeChart对StackedBar的自定义颜色
- Lua学习总结——内存管理
- thrift使用实例
- 一分钟搞懂APM,把流失的用户找回来
- Netty的超时机制
- Netty使用protobuf作为通信协议
- 黑马程序员-设计模式
- 分享一个链接
- 2015最火爆的代理招商!合冠泓云支付诚招全国分销商,
- UIScrollView中嵌入一个UITableView,使用Masonry来写Autolayout的demo
- Hibernate事务的初级知识