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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!