是什么?
Thrift是一个跨语言的服务部署框架最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。
究其原理,先不做研究。
类型系统
Thrift类型系统包括:
- 预定义基本类型;
- 常量;
- 用户自定义结构体;
- 容器类型;
- 异常;
- 服务定义;
1.预定义基本类型
- bool:布尔类型(true or value),占一个字节
- byte:有符号字节
- i16: 16位有符号整型
- i32: 32位有符号整型
- i64: 64位有符号整型
- double:64位浮点数
- string:未知编码或者二进制的字符串
- * 注意:thrift不支持无符号整型
2.常量
其中a处,分号是可选的,可有可无;支持十六进制赋值
3.自定义结构体
* 注意:结构体中的变量可以声明为required(必须的)/optional(可选的),如:
其中c处,代表Tweet这个结构体中,可以包含另一个结构体Location
4.容器类型
- Thrift容器与类型密切相关,它与当前流行编程语言提供的容器类型相对应,采用java泛型风格表示的。Thrift提供了3种容器类型:
- list<A>:一系列A类型的元素组成的有序表,元素可以重复
- set<A>:一系列A类型的元素组成的无需表,每个元素唯一
- map<A,B>:key/value键值对,key的类型是A且唯一,value类型是B
5.异常
6.服务定义
* 注意两个红框的地方
其它
1.文件包含
Thrift允许thrift文件包含,用户需要使用thrift文件名作为前缀访问被包含的对象,如:
其中a处thrift文件名要用双引号,并以.thrift结尾,末尾没有逗号或分号
2.注释格式
使用
通过.thrift文件生成Java代码
thrift -gen java thriftFileName.thrift
通过上面的命令将在与thrift文件同级的目录中生成namespace声明的目录结构,并将thriftFileName.java文件放在该目录下