集合中的元素能夠是除了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類。這是個人目錄: