thrift系列 - 快速入门
1.简介
Thrift是当前流行的RPC框架之一,它有强大的代码生成引擎,可以跨语言,轻松解决程序间的通信问题。
本文旨在帮助大家快速入门,若想深入原理,请参见thrift官网:http://thrift.apache.org/。(大家都很忙,少说废话)
2.下载windows版的IDL compiler
访问地址:http://www.apache.org/dyn/closer.cgi?path=/thrift/0.9.3/thrift-0.9.3.exe,在打开的页面中,任选一个资源下载。
下载完成后,假设我把thrift-0.9.3.exe文件移到"F:\test\thrift\bin"(你想移到哪儿你随意) 这个文件夹下。
3.定义接口文件
新建一个名为test.thrift的文件。以下是该文件里的内容:
- namespace java test.thrift_test
- service TestService {
- string getStruct(1: i32 num,2: string name)
- }
这就是一个很简单的接口文件。thrift的引擎(此处你可以理解为thrift-0.9.3.exe),就要利用test.thrift生成你指定的语言的代码。这个接口有两个参数,一个是32位的整数,一个是一个字符串,返回值的类型也是一个字符串。关于接口文件定义的方式,请参见下一篇文章《thrift类型定义》。
4.利用接口文件生成代码
打开windows的命令行(这个你不要问我)。切换到"F:\test\thrift\bin"(第2步的时候说过)
使用命令:thrift-0.9.3.exe -r --gen java test.thrift
打开"F:\test\thrift\bin"这个目录,你会发现有一个名为"gen-java"的文件夹,该文件夹下就是生成的java代码。
5.搭建maven环境
利用你的Java IDE构建一个maven工程。这里是pom.xml中需要添加的内容:
- <dependency>
- <groupId>org.apache.thrift</groupId>
- <artifactId>libthrift</artifactId>
- <version>0.9.3</version>
- </dependency>
这里面有thrift运行时所需要的所有依赖jar。
注意,请把gen-java文件夹下的代码粘贴到工程中去!
6.java版demo
首先把首先实现TestService接口:
- package test.thrift_test;
- import org.apache.thrift.TException;
- import test.thrift_test.TestService.Iface;
- //我们定义的test.thrift的接口的具体实现
- class TestServiceHandler implements Iface{
- public String getStruct(int num, String name) throws TException {
- return name + num;
- }
- }
Thrift是CS的通信方式,即有一个server端,和一个client端。
以下是Server端的示例代码:
- package test.thrift_test;
- 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 ){
- try {
- TestService.Processor processor = new TestService.Processor(new TestServiceHandler());
- TServerTransport serverTransport = new TServerSocket(9090);
- TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));
- server.serve();
- } catch (TTransportException e) {
- e.printStackTrace();
- }
- }
- }
以下是Client端的示例代码:
- package test.thrift_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;
- public class Client {
- public static void main(String[] args) {
- TTransport transport = new TSocket("localhost", 9090);
- try {
- transport.open();
- TProtocol protocol = new TBinaryProtocol(transport);
- TestService.Client client = new TestService.Client(protocol);
- String result = client.getStruct(123, "test");
- System.out.println(result);
- transport.close();
- } catch (TTransportException e) {
- e.printStackTrace();
- } catch (TException e) {
- e.printStackTrace();
- }
- }
- }
启动的时候,先运行 Server.java,再运行Client.java。正常情况下,控制台输出结果为:test123
本文内容参考如下:
【1】http://thrift.apache.org/
注意:
如您发现本文档中有明显错误的地方,
或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。
转载或使用本文档时,请作醒目说明。
必要时请联系作者,否则将追究相应的法律责任。
note:
If you find this document with any error ,
Or if you find any illegal citations , please contact me correct.
Reprint or use of this document,Please explain for striking.
Please contact the author if necessary, or they will pursue the corresponding legal responsibility.
最新文章
- V4.0到来了,css雪碧图生成工具4.0更新啦
- 从头写个http client(java)
- URL类
- 18 多线程编程 - 《Python 核心编程》
- 《Code Complete》ch.25 代码调整策略
- bjfu1164 Parity Game
- 自定义toast功能
- VI 命令学习指南
- jQuery 1.9不支持$.browser 怎么判断浏览器类型和版本
- hdu 1232 畅通project
- Windows 7的 磁盘管理中,某个磁盘或分区,突然变成只读。
- Citrix 服务器虚拟化之六 Xenserver虚拟机创建与快照
- Replication--进程无法在“xxxx”上执行“sp_replcmds”
- .net core web api + Autofac + EFCore 个人实践
- 51nod“省选”模测第二场 B 异或约数和(数论分块)
- Petrozavodsk Summer-2017. Warsaw U Contest
- 5.cgroup资源控制
- Nmap扫描基础常用命令(包含进阶使用)
- oracle 12c新特性 FETCH FIRST、WITH TIES 关键字详解
- TZOJ 3663 最长路径(floyd)
热门文章
- WinForm多语言版本实战项目演练
- 关于GPL协议的理解(开源与商用、免费与收费的理解)
- MySQL查询报错 ERROR: No query specified
- iOS内存管理 -讲的不错,角度独特
- 下载企业级证书打包的app 出现“无法下载应用程序”的问题
- tomcat server.xml maxPostSize=0 导致 果post表单收不到参数解决方案
- redis实现秒杀demo
- eclipse新发现功能之dos和terminal(ssh连接)
- Android之文件搜索工具类
- docker 日志清理与设置