集合中的元素能够是除了service以外的任何类型,包括exception。java
就像C语言同样,thrift也支持struct类型,目的就是将一些数据聚合在一块儿,方便传输管理。struct的定义形式以下:shell
struct NPC { 1:i32 id; 2:string name; }
枚举的定义形式和Java的Enum定义差很少,例如:框架
enum Action { Idle, Attack, Run }
thrift支持自定义exception,规则和struct同样,以下:函数
exception RequestException { 1: i32 code; 2: string reason; }
thrift定义服务至关于Java中建立Interface同样,建立的service通过代码生成命令以后就会生成客户端和服务端的框架代码。定义形式以下:ui
service HelloWordService { // service中定义的函数,至关于Java interface中定义的函数 string doAction(1: string name, 2: i32 age); }
thrift支持相似C++同样的typedef定义,好比:spa
typedef i32 Integer typedef i64 Long
注意:末尾没有逗号或者分号!code
thrift也支持常量定义,使用const关键字,例如:字符串
const i32 MAX_RETRIES_TIME = 10; const string MY_WEBSITE = "http://qifuguang.me";
末尾的分号是可选的,无关紧要,而且支持16进制赋值string
thrift的命名空间至关于Java中的package的意思,主要目的是组织代码。thrift使用关键字namespace定义命名空间,例如:io
namespace java com.game.lll.thrift
提示:格式是namespace 语言(Java) 路径(com.game.lll.thrift), 注意末尾不能有分号。
thrift也支持文件包含,至关于C/C++中的include,Java中的import,C#中的using。使用关键字include定义,例 如:
include "global.thrift"
thrift注释方式支持shell风格的注释,支持C/C++风格的注释,即#和//开头的语句都单当作注释,/**/包裹的语句也是注释。
thrift提供两个关键字required,optional,分别用于表示对应的字段时必填的仍是可选的。例如:
struct People { 1: required string name; 2: optional i32 age; }
表示name是必填的,age是可选的。
步骤一:建立一个文件,代码以下:
namespace java com.game.lll.thrift struct Request { 1: string username; 2: string password; } exception RequestException { 1: required i32 code; 2: optional string reason; } // 服务名 service LoginService { string doAction(1: Request request) throws (1:RequestException qe); // 可能抛出异常。 }
步骤二:在终端输入命令thrift -gen java login.thrift后会在当前目录下生成gen-java文件夹,该文件夹下会按照namespace定义的路径名一次一层层生成文件夹,到gen-java/com/game/lll/thrift/目录下能够看到生成的3个.java类。这是个人目录: