Apache Thrift 是一個可伸縮的,跨語言的RPC通信服務開發框架,將軟件棧與代碼生成引擎相結合,在C++、Java、Python、PHP、JavaScripti等語言中可以高效、無縫地構建服務。
Thrift是一個CS 結構,客戶端和服務端可以使用不用的語言進行開發,通過一箇中間語言IDL(Interface Description Language)來關聯。
準備工作:
1.Apache Thrift software framework,Thrift官方文檔
2.下載安裝Thrift,下載地址:http://thrift.apache.org/download
下載完成之後,將下載的文件名更改成thrift.exe,然後將文件所在路徑配置到Path環境變量裏面。
配置完成後,確認下thrift是否安裝成功。thrift -version
編寫thrift文件
在項目中新建一個data.thrift文件
//定義一個包名,語言是Java
namespace java thrift.generated
//定義數據類型別名,根據我們的習慣把thrift數據類型改成Java的數據類型,這樣我們可以方便使用
typedef i16 short //通過typedef定義i16爲short
typedef i32 int
typedef i64 long
typedef bool boolean
typedef string String
struct Person {
1: optional String username, //默認就是optional類型
2: optional int age,
3: optional boolean married
}
exception DataException {
1: optional String message,
2: optional String callStack,
3: optional String date //thrift不支持日期類型,用字符串表示
}
//用service定義接口方法
service PersonService {
Person getPersonByUsername(1: required String username) throws (1: DataException dataException)
void savePerson(1: required Person person) throws (1: DataException dataException)
}
生成文件目標語言代碼
生成命令:
thrift --gen java data.thrift
接着我們在idea打開命令終端來輸入thrift生成命令,我沒用idea自帶終端窗口,用的是cmder這個軟件,有需要的可以去cmder網站去下載,很好用這個終端工具。
執行完生成命令,不出意外的話,在我們的項目裏面可以看到生成好的文件了。
Gradle引用thrift依賴
"org.apache.thrift:libthrift:0.12.0"
Thrift客戶端和服務端
我們src/main/java新建一個目錄thrift/generated,將生成的thrift文件放到這個目錄下。
新建一個類實現thrift生成文件類
PersonServiceImpl
服務端
ThriftServer
客戶端
ThriftClient
啓動服務端和客戶端:
服務端控制檯打印:
客戶端控制檯打印: