文章目录
thrift 背景
由 Facebook 研发,主要用于各个服务之间的 RPC 通信,支持跨语言(c++,java,go,python,php,c#,js,Node.js)
thrift 是一个典型的 cs 架构,客户端和服务端可以采用不同的语言来开发,使用了一种中间语言 idl 来解决客户端和服务端电通信问题
客户端发起请求,服务器返回响应(类似于Http的工作方式) RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)
工作原理:定义thrift文件,由thrift文件(idl)生成双方语言的接口,model。这个 thrift 文件可以 RPC 的数据类型和接口,使用特殊的编译器来生成不同语言的代码,比如说对于 java 开发者,可以生成 java 代码
thrift 数据类型与结构
thrift 不支持无符号类型,java 不存在无符号类型
变量可选与必选
- required 表示必选
- optional 表示可选
struct People{
1: required string name;
2: optional i32 age;
}
typedef 类型定义
typedef i32 int
typedef i64 long
const 常量定义
const i32 MAX_RETRIES_TIME=10
const string MY_WEBSITE="https://blog.csdn.net/BADAO_LIUMANG_QIZHI'
基本数据类型
byte:有符号字节
i16:16位2字节有符号整数
i32:32位4字节有符号整数
i64:64位8字节有符号整数
double:64位8字节浮点数
string:字符串类型
容器类型
list:一系列由T类型的数据组成的有序列表,元素可以重复
set:一系列由T类型的数据组成的无序集合,元素不可重复
map:一个字典结构,key为K类型,value为V类型,相当于Java中的HashMap
枚举
enum Gender{MALE,FEMALE}
结构体
struct People{
1: required string name;
2: optional i32 age;
}
service 服务
thrift 中定义服务和 java 中创建 interface 一样,创建的 service 通过代码生成命令之后就会生成客户端和服务端的框架代码
service HelloWordService {
// service中定义的函数,相当于Java interface中定义的方法
string doAction(1:string name,2: i32 age);
}
命名空间
类似于 java 中的包名
namespace java com.bdao.thrift
文件包含
include "global.thrift"
异常
exception RequestException{
1: i32 code;
2: string reason;
}
注释
注释方式
#
//
/**/