参考地址:http://roclinux.cn/?p=3316
【thrift是什么】
计算机技术里一款著名的通信框架 – thrift框架
thrift的全名叫做Apache thrift,是一款软件开发RPC(remote procedure call,远程过程调用)框架,可以很高效地实现跨语言的RPC服务(远程过程调用协议)
(什么是RPC?https://baike.baidu.com/item/远程过程调用协议?fromId=32726&redirected=seachword)
【还有哪些RPC框架】
protobuf、Avro、MessagePack等
【为什么使用thrift】
项目举例:
给“托福考试成绩数据库”增加一个“成绩查询”的功能,客户端提供“用户ID”向服务器端发起查询请求,服务器端接到查询请求后从数据库中取回此用户ID对应的姓名和成绩,并返回给客户端。
上图是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;// 代理商列表 }