Thrift部署服务
一般的步骤为:编写服务说明,保存到.thrift文件->编译.thrift文件,生成相应的语言源代码->编写client端和server端代码。
语法
数据类型
Thrift 脚本可定义的数据类型包括以下几种类型:
基本类型:
bool:布尔值,true 或 false
byte:8 位有符号整数
i16:16 位有符号整数
i32:32 位有符号整数
i64:64 位有符号整数
double:64 位浮点数
string:未知编码文本或二进制字符串
结构体类型:
struct:定义公共的对象,类似于 C 语言中的结构体定义
容器类型:
List:一系列t1类型的元素组成的有序表,元素可以重复
Set:一系列t1类型的元素组成的无序表,元素唯一
Map<t1,t2>:key/value对(key的类型是t1且key唯一,value类型是t2)
异常类型:
exception 异常在语法和功能上类似于结构体,它在语义上不同于结构体—当定义一个RPC服务时,开发者可能需要声明一个远程方法抛出一个异常。
服务类型:
service:对应服务的类
注释
Thrfit支持shell注释风格,C/C++语言中单行或者多行注释风格
1 | # This is a valid comment. |
4 | * This is a multi-line comment. |
7 | // C++/Java style single-line comments work just as well. |
命名空间
Thrift中的命名空间同C++中的namespace和java中的package类似,它们均提供了一种组织(隔离)代码的方式。因为每种语言均有自己的命名空间定义方式(如python中有module),thrift允许开发者针对特定语言定义namespace:
1 | namespace cpp com.example.project |
2 | namespace java com.example.project |
文件包含
Thrift允许thrift文件包含,用户需要使用thrift文件名作为前缀访问被包含的对象
定义常量
Thrift允许用户定义常量,复杂的类型和结构体可使用JSON形式表示
1 | const i32 INT_CONST = 1234; |
2 | const map<string,string> MAP_CONST = {"hello": "world", "goodnight": "moon"} |
定义结构体
03 | 1: required i32 userId; // 每个域有一个唯一的,正整数标识符 |
05 | 2: required string userName; // 每个域可以标识为required或者optional(也可以不注明) |
07 | 3: required string text; |
09 | 4: optional Location loc; // 结构体可以包含其他结构体 |
11 | 16: optional string language = "english" // 域可以有缺省值 |
15 | struct Location { // 一个thrift中可定义多个结构体,并存在引用关系 |
17 | 1: required double latitude; |
19 | 2: required double longitude; |
定义服务
Thrift编译器会根据选择的目标语言为server产生服务接口代码,为client产生桩代码
01 | //“Twitter”与“{”之间需要有空格!!! |
04 | // 方法定义方式类似于C语言中的方式,它有一个返回值,一系列参数和可选的异常 |
06 | // 列表. 注意,参数列表和异常列表定义方式与结构体中域定义方式一致. |
08 | void ping(), // 函数定义可以使用逗号或者分号标识结束 |
10 | bool postTweet(1:Tweet tweet); // 参数可以是基本类型或者结构体,参数是只读的(const),不可以作为返回值!!! |
12 | TweetSearchResult searchTweets(1:string query); // 返回值可以是基本类型或者结构体 |
14 | // ”oneway”标识符表示client发出请求后不必等待回复(非阻塞)直接进行下面的操作, |
16 | // ”oneway”方法的返回值必须是void |
18 | oneway void zip() // 返回值可以是void |
函数中参数列表的定义方式与struct完全一样,Service支持继承,一个service可使用extends关键字继承另一个service
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。