参考地址: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;// 代理商列表
}

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帮你生成好的代码,
*/

Thrift接口简介的更多相关文章

  1. Linux中的IO复用接口简介(文件监视?)

    I/O复用是Linux中的I/O模型之一.所谓I/O复用,指的是进程预先告诉内核,使得内核一旦发现进程指定的一个或多个I/O条件就绪,就通知进程进行处理,从而不会在单个I/O上导致阻塞. 在Linux ...

  2. java多线程Lock接口简介使用与synchronized对比 多线程下篇(三)

    前面的介绍中,对于显式锁的概念进行了简单介绍 显式锁的概念,是基于JDK层面的实现,是接口,通过这个接口可以实现同步访问 而不同于synchronized关键字,他是Java的内置特性,是基于JVM的 ...

  3. SoapUI SoapUI测试WebService协议接口简介

    SoapUI测试WebService协议接口简介 by:授客 QQ:1033553122 1. 创建项目,入口:File -> New SOAP Project,或者右键默认项目Project- ...

  4. SQLite3 C/C++ 开发接口简介

    SQLite3 C/C++ 开发接口简介 1.0 总览 SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和 ...

  5. soapUI 使用soapUI测试http+json协议接口简介

    使用soapUI测试http+json协议接口简介 by:授客 QQ:1033553122 SoapUI-Pro-x64-5.1.2_576025(含破解文件),软件下载地址: http://pan. ...

  6. ADI高速信号采集芯片与JESD204B接口简介

    ADI高速信号采集芯片与JESD204B接口简介 JESD204B接口 介绍: JEDEC Standard No. 204B (JESD204B)—A standardized serial int ...

  7. Lock接口简介

    在Java多线程编程中,我们经常使用synchronized关键字来实现同步,控制多线程对变量的访问,来避免并发问题. 但是有的时候,synchronized关键字会显得过于沉重,不够灵活.synch ...

  8. 使用Jmeter测试thrift接口

    术语描述 jmeter:一款性能压力测试工具,支持多种协议,java .http 等,但是不支持thrift thrift:跨语言的RPC调用框架,提供编译器,可以将thrift接口生成不同语言的接口 ...

  9. 简单谈谈网络抓包,特别是thrift 接口

    按照惯例先谈谈最近情况,最近不是刚好跨年吗?看到很多人都在写年度总结,所以我也在写年度总结文章(其实之前我基本没有写过的,今年有点感触,也想记录一下),结果发现写起来有点多,之前还想着元旦前发出来,结 ...

随机推荐

  1. python获取响应某个字段值的三种方法

    近期将要对两个接口进行测试,第一个接口的响应值是第二个接口的查询条件.为了一劳永逸,打算写个自动化测试框架.因为请求和响应都是xml格式的,遇到的问题就是怎么获取xml响应的某一个值.尝试了很多博客的 ...

  2. Eureka+Hystrix(断路器、熔断器)

    红圈是断路器的三种状态: 关闭:1.当consumer访问provider时,在网络超时访问内,访问成功: 2.有时互相调用会出现网络涌动,(比如北京访问广东的服务器要经过很多次路由才能达到并相应), ...

  3. 自动化运维Ansible-01-安装及简单的使用

    实验环境:Centos 7.x Ansible版本:ansible 2.9.13 服务端的操作 1.系统默认的yum仓库中没有找到ansible,这里我们先安装epel源(需要用到CentOS-Bas ...

  4. LoRa联盟的简介

    LoRa联盟成立于2015年3月,从成立开始,LoRaWAN规范就在不断更新,从1.0.0版本已更新至1.0.2版本,目前能公开下载的事2016年7月完成的1.0.2版本,可以看到该规范的主要作者包括 ...

  5. 5G应用的实时决策

    背景概述 尽管近几年很多供应商在不断重申着他们对VoltDB持续输出的专业认可,VoltDB也随着技术发展在不断增加一些流行技术词汇,但是真正让大家了解某个技术产品持续演进的特性,单单依靠增加几个技术 ...

  6. [Luogu P4215] 踩气球 (线段树)

    题面 传送门:https://www.luogu.org/problemnew/show/P4215 Solution 这题十分有意思. 首先,我们可以先想想离线做法,因为在线做法可以从离线做法推出. ...

  7. [POJ 2821]TN's Kindom III(任意长度循环卷积的Bluestein算法)

    [POJ 2821]TN's Kindom III(任意长度循环卷积的Bluestein算法) 题面 给出两个长度为\(n\)的序列\(B,C\),已知\(A\)和\(B\)的循环卷积为\(C\),求 ...

  8. fflush(stdin)和fflush(stdout)

    转自:http://blog.csdn.net/yeyuangen/article/details/6743416 fflush(stdin)即清理标准输入流,把多余的仍未被保存的数据丢掉. fflu ...

  9. Python图书管理系统

    图书管理系统 功能简介 添加图书时,图书ID不能重复,图书名可重复 删除,查询,修改功能,输入图书名之后提供所有的同名的图书,用户可以按照图书序号对具体的一本书进行操作 显示书籍,分行显示,每行一本书 ...

  10. 【Java】线程的创建方式

    1.继承Thread类方式 这种方式适用于执行特定任务,并且需要获取处理后的数据的场景. 举例:一个用于累加数组内数据的和的线程. public class AdditionThread extend ...