点击打开链接
一、thrift 定义:
Thrift 最初由Facebook开发,而后捐献给Apache,目前已广泛应用于业界。Thrift 正如其官方主页介绍的,“是一种可扩展、跨语言的服务开发框架”。目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等。其中所用到的数据传输方式包括 XML,JSON 等,然而 XML 相对体积太大,传输效率低,JSON 体积较小,新颖,但还不够完善。本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 等创建高效的、无缝的服务,其传输数据采用二进制格式,相对 XML 和 JSON 体积更小,对于高并发、大数据量和多语言的环境更有优势。
Thrift 包含一个完整的堆栈结构用于构建客户端和服务器端,详见下图:
- IDL:规定相应的接口定义语言
- code generated:自动生成相应语言的接口代码文件
- protocol:通过约定的数据格式来传输数据,比如:二进制、json,这里需要客户端和服务端用到的 protocal 保持一致才行
- transport:就是控制输入输出流对数据进行读写,常用的阻塞、非阻塞的方式
二、简单的服务部署结构:
从图中我们可以看到,客户端和服务器端部署时,需要用到公共的 jar 包和 java 文件,如图“Common file”区域,其中 Hello.java 由 Hello.thrift 编译而来。
在服务器端,服务必须实现 Hello.Iface 接口,同时要包括服务器的启动代码 HelloServiceServer.java。
在客户端,包括客户端调用服务的代码 HelloServiceClient.java,客户端和服务器通过 Hello.java 提供的 API 实现远程服务调用。
三、数据类型:
- 基本类型:
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:utf-8编码的字符串,对应 Java 的 String
- 结构体类型:model.thrift
struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean
- 容器类型:
list:对应 Java 的 ArrayList
set:对应 Java 的 HashSet
map:对应 Java 的 HashMap
- 异常类型:exception.thrift
exception:对应 Java 的 Exception
服务类型:service.thrift
service:对应服务的类 IDL文件中对所有接口函数的描述都放在service中 thrift编译器会产生实现这些接口的client和server端
四、命名空间和文件包含:
五、IDL 关键词对应的 Java 注解 :