Thrift接口簡介

參考地址:http://roclinux.cn/?p=3316java

【thrift是什麼】linux

計算機技術裏一款著名的通訊框架 – thrift框架數據庫

thrift的全名叫作Apache thrift,是一款軟件開發RPC(remote procedure call,遠程過程調用)框架,能夠很高效地實現跨語言的RPC服務(遠程過程調用協議)服務器

(什麼是RPC?https://baike.baidu.com/item/遠程過程調用協議?fromId=32726&redirected=seachword)網絡

【還有哪些RPC框架】架構

protobuf、Avro、MessagePack等框架

【爲何使用thrift】ide

項目舉例:工具

給「托福考試成績數據庫」增長一個「成績查詢」的功能,客戶端提供「用戶ID」向服務器端發起查詢請求,服務器端接到查詢請求後從數據庫中取回此用戶ID對應的姓名和成績,並返回給客戶端。spa

上圖是CS架構的數據傳輸,正常的話,開發同窗就須要考慮三次握手,四次揮手,還要考慮服務端跟客戶端的語言是否一致,編寫大量代碼,實現需求。

可是若是使用thrift工具的話,只須要調用下RPC框架工具,就能夠直接生成上述全部代碼。即便語言不通。大大簡化了開發的工做量

【怎麼使用thrift】

1. 明確交互的數據類型(例UserGradeInfo),和方法(search),定義thrift接口描述文件

2. 調thrift工具,依據thrift接口文件,生成RPC代碼

3. 服務器端程序引用PRC代碼,實現其中的search動做邏輯,啓動監聽,等待客戶端發送請求

4. 客戶端引用RPC代碼,與服務端通訊

【thrift實例】

咱們來定義上面的thrift文件

//定義數據類型-結構體

struct UserGradeInfoTDto{

  1: string userName;

  2: double userGrade;

}

//項目舉例,項目中的接口文件描述的仍是比較簡單易懂的,結構體定義比較簡單,服務的定義就是:返回數據對象   方法名稱(參數...)

namespace java com.sogou.adm.bizdev.griffin.thrift.dto.accountinfo

struct AccountBaseTDto{
    1:  i64 accountId;
    2:  string email;
    3:  string companyName;
    4:  string status;
    5:    i64 agentId;
}

struct KaAchievementAccountTDto{
    1:  i64 accountId;
    2:  string companyName;
}

struct AgentBaseInfoTDto{
    1: i64 agentId;// 代理商ID
    2: string agentName;// 代理商名稱
    3: i32 agentType;// 代理商類型
    4: i32 contract;// 簽署公司:搜狗信息or搜狗網絡
    5: i32 agentAchievementType;// 業績歸屬,記中小業績or記KA業績
    6: string channelName;//渠道經理
    7: i64 channelId;// 渠道經理ID
    8: string status;// 狀態
}

struct AgentBaseInfoApiTResult{
    1: bool success;// 成功標識
    2: string message;// 返回消息
    3: list<AgentBaseInfoTDto> agentList;// 代理商列表
}
accountbaseinfodto.thrift
namespace java com.sogou.adm.bizdev.griffin.thrift.iface.account

include "accountbaseinfodto.thrift"

service QueryAccountInfoTService {
      //根據agentName查詢計ka業績代理商
    list<accountbaseinfodto.KaAchievementAccountTDto> getKaAchievementAgentByName(1:string agentName);
    // 根據代理商名稱(模糊查詢)、代理商類型、計業績類型,查詢代理商信息
    accountbaseinfodto.AgentBaseInfoApiTResult getAgentListByNameTypeAchivement(1:string agentName, 2:i32 agentType, 3: i32 achivementType);
}
queryaccountinfo.thrift

 

//服務定義,能夠繼承其餘服務,

service Calculator extends shared.SharedService {

/**

* 服務中方法的定義很是相似於C語言的語法。它會包括一個返回值,
* 一個參數列表以及一個能夠拋出的異常列表(可選)
* 能夠提早告訴你們的是,定義參數列表的方法、定義異常列表的方法,
* 和定義結構體的方法都是類似的,能夠從下面的例子中看出。
* 除了最後一個方法,其餘的方法最後都要有一個逗號,你們可不要忽略這個細節。
公式:
  返回數據對象   方法名稱(參數...)
*/
 
void ping(),
 
i32 add(1:i32 num1, 2:i32 num2),
 
/**
* 在異常列表前,須要加throws關鍵字。
*/
i32 calculate(1:i32 logid, 2:Work w) throws (1:InvalidOperation ouch),

list<struct UserGradeInfoTDto> getuserGradeByName(1: string userName);

/**
* 以下的這個方法有一個oneway修飾符,還記得他的做用麼
* 這表示這個方法在調用後會當即返回,不會等待遠端的回覆。
* 要注意的是,oneway只能修飾void返回類型。
* oneway在英語裏就是「單向」的意思,仍是很形象滴。
*/
oneway void zip()
 
}

 

 

/**

* 在你使用thrift編譯工具編譯此文件後,
* 會在當前目錄產生一個「gen-&lt;你選擇的開發語言&gt;」
* 文件夾,好比你選擇的是C++語言,則會產生gen-cpp文件夾,
* 裏面放着的即是thrift幫你生成好的代碼,
*/
相關文章
相關標籤/搜索