使用Java快速入门Thrift
2016-05-06 17:13
555 查看
Apache Thrift是一个facebook建立的RPC框架,现在是一个Apache的顶级项目。Thrift允许通过一个跨语言的定义文件的方式定义数据类型和服务接口,这个文件作为RPC客户端和服务器通信的标准,你也可以去看看Thrift的白皮书了解更多信息。
根据Apache Thrift的官方站点的描述,Thrift是一个:
software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript,
Node.js, Smalltalk, OCaml and Delphi and other languages.
![](http://static.oschina.net/uploads/space/2012/0708/195707_W5if_82993.png)
安装Thrift比较的烦,但是在Windows下官方编译了一个thrift.exe,下载安装就行了。
如果你之前有接触过这个东西的话,写定义文件非常的简单。但这里可以参考官方的教程快速开始。
示例定义文件(add.thrift)
下面的命令编译.thrift文件
thrift --gen <language> <Thrift filename>
对于我的例子来讲,命令是:
thrift --gen java add.thrift
在执行完代码后,在gen-java目录下你会发现构建RPC服务器和客户端有用的源代码。在我的例子中我将创建一个叫做AddtionService.java的java文件。
Service handler 类必须实现 AdditionService.Iface接口。
示例Service handler(AdditionServiceHandler.java)
下面的示例代码是一个简单的Thrift服务器。可以看到下面的代码中有一段是注释了的,可以去掉注释来启用多线程服务器。
示例服务器(MyServer.java)
下面的例子是一个使用Java写的客户端短使用AdditionService的服务。
运行服务端代码(MyServer.java)将会看到下面的输出。
Starting the simple server...
然后运行客户端代码(AdditionClient.java),将会看到如下输出。
300
根据Apache Thrift的官方站点的描述,Thrift是一个:
software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript,
Node.js, Smalltalk, OCaml and Delphi and other languages.
![](http://static.oschina.net/uploads/space/2012/0708/195707_W5if_82993.png)
安装Thrift比较的烦,但是在Windows下官方编译了一个thrift.exe,下载安装就行了。
写 Thrift定义文件(.thrift file)
如果你之前有接触过这个东西的话,写定义文件非常的简单。但这里可以参考官方的教程快速开始。示例定义文件(add.thrift)
namespace java com.eviac.blog.samples.thrift.server // defines the namespace typedef i32 int //typedefs to get convenient names for your types service AdditionService { // defines the service to add two numbers intadd(1:intn1, 2:intn2), //defines a method }
编译Thrift定义文件
下面的命令编译.thrift文件thrift --gen <language> <Thrift filename>
对于我的例子来讲,命令是:
thrift --gen java add.thrift
在执行完代码后,在gen-java目录下你会发现构建RPC服务器和客户端有用的源代码。在我的例子中我将创建一个叫做AddtionService.java的java文件。
写一个 service handler
Service handler 类必须实现 AdditionService.Iface接口。示例Service handler(AdditionServiceHandler.java)
package com.eviac.blog.samples.thrift.server; import org.apache.thrift.TException; public class AdditionServiceHandler implements AdditionService.Iface { @Override publicint add(intn1, intn2) throws TException { returnn1 + n2; } }
写一个简单的服务器
下面的示例代码是一个简单的Thrift服务器。可以看到下面的代码中有一段是注释了的,可以去掉注释来启用多线程服务器。示例服务器(MyServer.java)
package com.eviac.blog.samples.thrift.server; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TServerTransport; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TServer.Args; import org.apache.thrift.server.TSimpleServer; public class MyServer { public static void StartsimpleServer(AdditionService.Processor<AdditionServiceHandler> processor) { try{ TServerTransport serverTransport = new TServerSocket(9090); TServer server = new TSimpleServer( newArgs(serverTransport).processor(processor)); // Use this for a multithreaded server // TServer server = new TThreadPoolServer(new // TThreadPoolServer.Args(serverTransport).processor(processor)); System.out.println("Starting the simple server..."); server.serve(); }catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { StartsimpleServer(new AdditionService.Processor<AdditionServiceHandler>(new AdditionServiceHandler())); } }
写一个客户端
下面的例子是一个使用Java写的客户端短使用AdditionService的服务。package com.eviac.blog.samples.thrift.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 AdditionClient { public static void main(String[] args) { try{ TTransport transport; transport = new TSocket("localhost",9090); transport.open(); TProtocol protocol = new TBinaryProtocol(transport); AdditionService.Client client = new AdditionService.Client(protocol); System.out.println(client.add(100,200)); transport.close(); }catch(TTransportException e) { e.printStackTrace(); }catch(TException x) { x.printStackTrace(); } } }
运行服务端代码(MyServer.java)将会看到下面的输出。
Starting the simple server...
然后运行客户端代码(AdditionClient.java),将会看到如下输出。
300
相关文章推荐
- 第一次使用Struts2的注解功能
- Thrift下Java客户端与服务器端的开发
- JAVA逻辑运算符
- springMVC中web.xml配置解析
- javamail验证失败Authentication failed
- Windows下启动eclipse出现JRE or JDK must be available in order to run Eclipse.No Java virtual machine was
- java第二天_进制转换原理和补码存储方式
- 求圆的周长和面积!利用Scanner创建对象进行数据的输入
- Java String和Date的转换
- java编码规范
- Spring4 集成 Hibernate3 使用 HibernateTemplate 和使用 HibernateDaoSupport 操作对象
- java 资源获取
- 解决:java.lang.NumberFormatException: For input string: "id"
- [置顶] Thrift入门及Java实例演示
- java文件是否超出尺寸(待优化)
- 几种任务调度的 Java 实现方法与比较
- JAVA八种基本数据类型存储数值,字符和布尔值
- Eclipse 安装EGit失败
- 在Eclipse中配置Maven
- java集合08--List总结