Thrift基础

                                                             点击打开链接

一、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 包含一个完整的堆栈结构用于构建客户端和服务器端,详见下图:


总结一下,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端 

四、命名空间和文件包含:


thrift文件中的: namespace java com.example.project 转换成java:package com.example.project
  thrift文件中还可用include "xxx.thrift"访问被包含的其他thrift对象, 注意使用 xxx.  的前缀
 对thrift接口进行实现或实例化thrift接口时,使用的是thrift接口的 Iface接口

五、IDL 关键词对应的 Java 注解 :

         service <-> @ThriftService注解service类 @ThriftMethod注解该类中的方法

 

          struct <-> @ThriftStruct 注解model类 @ThriftField注解该类中的getter方法

 

          enum <-> @ThriftEnumValue 注解enum
参考网址:https://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值