2、thrift的原理重點分析之協議規則thrift檔案
我們知道系統間的通訊需要提前設定一定的規則,只有各自雙方都遵守這個規則,才能相互間通訊,如果每個都有自己的規則,則就無法通訊。thrift框架規定了自己的協議,這個協議通過編寫thrift檔案進行設定,其實就是服務端提供服務的介面。
我們首先了解一下這個thrift的協議怎樣寫:
案例:
namespace java cn.stq.thrift
include "../Ex.thrift"
const i32 a=5
struct User{ 1:string realName, 2:string loginName, 3:string birthday } service UserService { list<User> getUser() throws (1:Ex.thriftDataException dataEx,2:Ex.thriftBusinessException businessEx,3:Ex.thriftSystemException systemEx) }
namespace:說明名稱空間, java:說明生成java程式碼,如果要生成c#程式碼,則改成csharp,cn.stq.thrift:說明生成的程式所在的包
const:用於修飾常量的。
include "../Ex.thrift":說明引入的thrift檔案。Ex.thrift:表示自定義的異常檔案
struct:表示結構體,這樣我們就可以引入java中的JavaBean了
service:表示向外界提供的服務。
thrift的所支援的資料型別:
1)基礎資料型別:
boolean型別,值為true或false
byte型別
i16型別 java中對應char
i32型別 java中對應的int
i64型別 java中對應的long
string型別 java中對應的String
double型別 java對應的浮點型double
2) 容器
list型別 java對應的List
set型別 java對應Set
map型別 java對應的Map
3)列舉
例如:
enum Grade{
M1,M2,M3,H1,H2,H3,MS,HS
}
4)結構體 可以定義像java的javaBean
例如:
struct User{
1:string realName,
2:string loginName,
3:string birthday
}
服務:這是thrift檔案的重點了,服務就是服務端對外提供的功能了,如果你想對外提供什麼功能,就可以在這新增服務了,但是thrift檔案時靜態檔案,當生成具體的程式碼後,就無法改變了,這也是thrift框架的一個缺點吧。