从零开始学习Thrift之一(了解Thrift)

从零开始学习Thrift之一(了解Thrift)

1. What is Thrift

Thrift is a lightweight, language-independent software stack for point-to-point RPC implementation. 
Thrift provides clean abstractions and implementations for data transport, data serialization, and 
application level processing. The code generation system takes a simple definition language as input 
and generates code across programming languages that uses the abstracted stack to build interoperable RPC clients and servers.

上面是官方给出的介绍,简单的说就是:
Thrift是一种轻量级、独立于语言的点对点的RPC实现框架,且其为数据传输,数据序列化和应用程序级处理提供了干净的抽象和实现,生成的代码可以跨语言跨平台的调用。

那什么是RPC框架呢?

一般的HTTP接口请求是在应用层完成的,而RPC可以不依赖于应用层协议,可以直接基于TCP进行远程调用,在传输层中即可完成通信,因此更适于某些对效率要求更高的场景。由于RPC调用方式依赖于客户端与服务端之间建立Socket连接来实现二进制数据通信,底层会比较复杂,所以一些RPC框架应运而生来封装这种复杂性,让开发者将精力聚焦于业务之上。常见的RPC框架包括:Thrift、gRPC、Finagle、Dubbo等等。

2. Thrift文件的定义与编写

使用IDL对接口进行描述的thrift文件命名一般都是以“.thrift”作为后缀:XXX.thrift,可以在该文件的开头为该文件加上命名空间限制,格式为:namespace语言 命名空间的名字;

编写IDL文件时需要注意的问题

  1. 函数的参数要用数字依序标好,序号从1开始,形式为:“序号:参数名”;

  2. 每个函数的最后要加上“,”,最后一个函数不加;

  3. 在IDL中可以使用/……/添加注释

  4. 变量名不可以数字开头

Thrift支持的数据类型

基本类型:

bool:布尔值,true 或 false,对应 Java 的 boolean
byte:8 位有符号整数,对应 Java 的 byte
i16:16 位有符号整数,对应 Java 的 short
i32:32 位有符号整数,对应 Java 的 int
i64:64 位有符号整数,对应 Java 的 long
double:64 位浮点数,对应 Java 的 double
string:未知编码文本或二进制字符串,对应 Java 的 String

结构体类型:

struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean

容器类型:

list:对应 Java 的 ArrayList
set:对应 Java 的 HashSet
map:对应 Java 的 HashMap

异常类型:

exception:对应 Java 的 Exception

服务类型:

service:对应服务的类

3. 生成接口文件

搭建Thrift编译环境之后,使用下面命令即可将IDL文件编译成对应语言的接口文件:

thrift --gen <language> <Thrift filename>

生成接口文件之后就可以继续接下来的服务端和客服端代码开发了,下次继续学习。

4. Thrift的相关网址和资料:

  1. Thrift的官方网站:http://thrift.apache.org/

  2. Thrift官方下载地址:http://thrift.apache.org/download

  3. Thrift官方的IDL示例文件(自己写IDL文件时可以此为参考):
    https://git-wip-us.apache.org/repos/asf?p=thrift.git;a=blob_plain;f=test/ThriftTest.thrift;hb=HEAD

  4. 各种环境下搭建Thrift的方法:http://thrift.apache.org/docs/install/
    该页面中共提供了CentOS\Ubuntu\OS X\Windows几种环境下的搭建Thrift环境的方法。

参考:
https://blog.csdn.net/houjixin/article/details/42778335
https://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/index.html

发布了52 篇原创文章 · 获赞 86 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/dianxin113/article/details/91990139