Thrift
Thrift是一个轻量级、跨语言的RPC框架,主要用于各个服务之间的RPC通信。最初由Facebook于2007年开发,2008年进入Apache开源项目。通过自身的IDL(Interface Definition Language)接口定义中间语言,借助代码生成引擎生成各种主流语言的RPC服务端/客户端模版代码。
特性
开发速度快、接口维护简单、学习成本低、跨语言支持、广泛使用
附录
IDL语法
最新的语法需要参考官方文档
基本类型
类型 | 描述 | Java | Go |
---|---|---|---|
i8 | 有符号的8位整数 | byte | int8 |
i16 | 有符号的16位整数 | float | int16 |
i32 | 有符号的32位整数 | int | int32 |
i64 | 有符号的64位整数 | long | int64 |
double | 64位浮点数 | double | float64 |
bool | 布尔值 | boolean | bool |
string | 文本字符串(UTF-8编码格式) | java.lang.String | string |
特殊类型
binary:未编码的字节序列,是string的一种特殊形式。Java中对应的是java.nio.ByteBuffer,Go中是[]byte。
集合
类型 | 描述 | Java | Go |
---|---|---|---|
list<T> | 有序列表,允许重复 | java.util.List | []T |
set<T> | 无序列表,不允许重复 | java.util.Set | []T |
map<K, V> | key-value结构,key不允许重复 | java.util.Map | map[K] V |
常量及类型别名
// 常量定义
const i32 MALT_COUNT = 1
const map<i32, string> GENDER_MAP = {1: "male", 2: "female"}
// 别名定义
typedef map<i32, string> gmp
struct 类型
struct <结构体名称> {
<序号>:[字段性质] <字段类型> <字段名称> [= <默认值>] [;|,]
}
例如:
struct User{
1: required string name; // 必须填写
2: optional i32 age = 0; // 默认值为0
3: bool gender; // 默认字段类型为 optional
}
IDL文件编译
# 生成java
thrift -gen java user.thrift
# 指定输出目录
thrift -gen java -o target user.thrift