`
halloffame
  • 浏览: 55720 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Apache Thrift 初学小讲(一)

阅读更多

一 简介:

       Apache Thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器,现在是 Apache 基金会的顶级项目,对于当时的facebook来说创造thrift是为了解决facebook系统中各系统间大数据量的传输通信以及系统之间语言环境不同需要跨平台的特性,所以thrift可以支持多种程序语言:C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml, Delphi等。

       Apache Thrift是跨语言服务访问的RPC通信框架。通过接口定义语言(IDL)定义和创建服务,Thrift生成特定语言的可供server和client访问的代码。关于IDL的话题我们可以追溯到CORBA盛行1999-2001年(Common Object Request Broker Architecture/公用对象请求代理体系结构)。Apache Thrfit有着非常优秀的效率。适用于搭建大型数据交换及存储的通用工具,对于大型系统中的内部数据传输相对于JSON和xml无论在性能、传输大小上有明显的优势。

 

二 需要的工具和文件:

以java为例,使用thirft时,在编写完接口定义文件*.thirft后,需要一个生成器(windows下是thrift-0.9.3.exe)来生成server和client的代码,生成的代码里面依赖一个jar包libthrift-0.9.3.jar。

 

thrift-0.9.3.exe官网有提供直接下载,libthrift-0.9.3.jar官网有提供maven的下载方式:

http://thrift.apache.org/download


 

也可以通过下载thrift源码工程来编译生成thrift-0.9.3.exe和libthrift-0.9.3.jar,下载下来的是一个压缩包thrift-0.9.3.tar.gz,解压后路径thrift-0.9.3\compiler下就是thrift-0.9.3.exe的源码,cpp写的,有兴趣可以编译打包一下。路径thrift-0.9.3\lib\java下就是libthrift-0.9.3.jar的源码,直接导入eclipse,直接ant build一下就可以了,在build目录下就能找到打包好的libthrift-0.9.3.jar以及一些依赖的jar包。

 

三 接口定义文件说明

thrift-0.9.3.tar.gz,解压后文件thrift-0.9.3\tutorial\tutorial.thrift是一份关于接口定义文件的基本说明:

 

1--支持的类型

bool             Boolean, one byte

byte             Signed byte

i16               Signed 16-bit integer

i32               Signed 32-bit integer

i64               Signed 64-bit integer

double         64-bit floating point value

string           String

binary          Blob (byte array)

map<t1,t2>  Map from one type to another

list<t1>         Ordered list of one type

set<t1>        Set of unique elements of one type

 

2--可以include另外一个*.thrift,默认是搜索当前路径的,也可以在编译*.thrift文件时,命令行用-I指定要搜索的被包含文件的路径

include "shared.thrift"

 

3--针对不同的语言命名空间、包或前缀

namespace cpp tutorial

namespace d tutorial

namespace java tutorial

namespace php tutorial

namespace perl tutorial

namespace haxe tutorial

 

4--像c语言一样重新命名类型

typedef i32 MyInteger

 

5--可以定义常量,复杂类型的常量使用json来赋值

const i32 INT32CONSTANT = 9853

const map<string,string> MAPCONSTANT = {'hello':'world', 'goodnight':'moon'}

 

6--可以定义枚举,值是32位的整数,不指定值的话默认从1开始算起

enum Operation {

  ADD = 1,

  SUBTRACT = 2,

  MULTIPLY = 3,

  DIVIDE = 4

}

 

7--可以定义一个struct,每一个field由整数标识符,一个类型,一个符号名称,和一个可选的默认值,field可声明为可选(如果没set值的话,序列化输出的时候将会忽略)

struct Work {

  1: i32 num1 = 0,

  2: i32 num2,

  3: Operation op,

  4: optional string comment,

}

 

8--定义异常类型的struct

exception InvalidOperation {

  1: i32 whatOp,

  2: string why

}

 

9--定义一个服务,可以使用关键字extends继承另外一个服务

service Calculator extends shared.SharedService { //SharedService定义在另外一个文件shared.thrift

   //类似c语言风格定义一个方法,可以有参数和异常列表

   void ping(),

   i32 add(1:i32 num1, 2:i32 num2),

   i32 calculate(1:i32 logid, 2:Work w) throws (1:InvalidOperation ouch),

   //用oneway声明的方法只接受请求,没有响应,返回类型必须是void

   oneway void zip()

}

 

以上仅是一些比较基础的说明,更多详细的例子在路径thrift-0.9.3\test下

2
1
分享到:
评论

相关推荐

    Apache Thrift 初学小讲(五)【代理】

    在"Apache Thrift 初学小讲(五)【代理】"这篇博文中,我们将探讨Thrift如何实现代理服务,这在分布式系统中非常关键,因为代理可以提供负载均衡、安全控制、监控等功能。 1. **接口定义语言(IDL)**:Thrift ...

    Apache Thrift 初学小讲(七)【负载均衡】

    在本篇初学小讲中,我们将重点关注Thrift在负载均衡方面的应用,这对于构建大型分布式系统至关重要。Thrift通过提供一种高效的数据序列化机制以及RPC(远程过程调用)接口,使得不同编程语言之间可以轻松地进行通信...

    Apache Thrift 初学小讲(六)【spring】

    在本篇小讲中,我们将探讨如何将Thrift与Spring框架结合,以便于构建微服务架构。 首先,让我们了解Thrift的基本工作原理。Thrift IDL(接口定义语言)允许开发者声明服务方法和数据类型,类似于Java中的接口或C++...

    Apache Thrift 初学小讲(三)【http】

    在“Apache Thrift 初学小讲(三)【http】”中,我们将深入探讨Thrift如何与HTTP协议相结合,实现基于HTTP的服务通信。 首先,Thrift 提供了一个名为 `ThriftServlet` 的组件,它是将Thrift服务与Java Servlet容器...

    Apache Thrift 初学小讲(八)【zookeeper实现服务注册与发现】

    Apache Thrift 是一个开源的软件框架,用于构建可伸缩的、跨语言的服务。它结合了接口定义语言(IDL)和库,允许开发者定义数据结构和服务接口,然后自动生成多种编程语言的代码,使得不同语言之间可以高效地进行...

    用C#和C++写的Apache Thrift的小范例

    本例改编自Apache Thrift教程: http://mikecvet.wordpress.com/2010/05/13/apache-thrift-tutorial-the-sequel/ http://chanian.com/2010/05/13/thrift-tutorial-a-php-client/ 原教程使用的是c++ server和...

    thrift-Demo

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并开源,后来成为Apache软件基金会的顶级项目。Thrift的核心思想是通过定义一种中间描述文件(.thrift),来实现数据结构和服务接口的跨语言共享。这...

    thrift-0.9.1

    Thrift-0.9.1 是一个开源的跨语言服务开发框架,由Facebook于2007年开源,后来成为了Apache软件基金会的顶级项目。这个版本的Thrift源码包包含了一系列的工具和库,使得开发者能够高效地构建分布式系统。Thrift的...

    thrift1 查询hbase

    在IT领域,尤其是在大数据处理和分布式系统中,HBase是一个重要的NoSQL数据库,它基于Apache Hadoop并提供了高性能、列式存储、可扩展的实时读写能力。而Thrift是一种跨语言的服务框架,由Facebook开发,它允许不同...

    thrift入门学习教程

    Thrift是由Facebook开发并在2007年贡献给Apache基金会的一款开源项目。它的主要目的是解决跨平台、跨语言的系统间大数据量传输通信问题。在早期,Facebook面临着系统之间语言环境不一致的问题,因此需要一种能够实现...

    Java Thrift demo例子

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开源,现由Apache基金会维护。它允许开发者定义服务接口,然后自动生成多种编程语言的代码,使得不同语言之间可以进行高效、可靠的RPC(远程过程调用)...

    THRIFT 学习资料

    THRIFT 是一个开源的跨语言服务开发框架,由 Facebook 在 2007 年创建并贡献给了 Apache 基金会。它旨在提供一种高效、可扩展、跨平台的解决方案,用于构建分布式系统中的应用程序接口(API)。通过 THRIFT,开发者...

    thrift c++ php

    Thrift是一种开源的跨语言服务开发框架,最初由Facebook开发并贡献给Apache基金会。它允许开发者定义服务接口和数据类型,然后自动生成多种编程语言的代码,使得在不同语言之间进行高效、可靠的通信成为可能。在这个...

    【Thrift之C++远程调用helloworld菜鸟教程】

    Thrift是一种跨语言的服务开发框架,最初由Facebook开发,现在是Apache软件基金会的项目。它允许程序员定义服务接口,然后自动生成多种编程语言的代码,使得在这些不同的语言之间进行远程过程调用(RPC)变得容易。...

    thrift.demo.rar

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并开源,后来成为Apache软件基金会的顶级项目。它通过定义一种中间语言(IDL,Interface Definition Language)来描述服务接口,允许开发者在不同的...

    Thrift和Avro实例

    Avro是Apache Hadoop项目的一部分,由LinkedIn设计。它同样是一种数据序列化系统,但更侧重于数据存储和交换。Avro提供了紧凑、高效的二进制数据格式,适合大规模数据处理。与Thrift类似,Avro也使用JSON格式定义...

    Thrift服务开发框架 v0.16.0.gz

    Thrift服务开发框架v0.16.0是一款强大的跨语言服务开发工具,它由Facebook开源,现由Apache基金会维护。这个版本的Thrift提供了一种高效、灵活且可扩展的方式来构建分布式系统。Thrift的核心理念是通过定义一种中间...

    apache zeppelin使用文档

    Apache Zeppelin 是一款功能强大的基于 Web 的 Notebook 服务器,它为数据科学家提供了一个交互式的环境来探索数据、编写代码并创建可视化报告。Zeppelin 的核心优势在于其灵活的解释器机制,允许用户与各种不同的...

    apache-cassandra-0.8.4-bin.tar.gz 分布式数据库

    Apache Cassandra 是一个高度可扩展的、高性能的分布式数据库系统,由Facebook开发并在2008年贡献给了Apache软件基金会。Cassandra的设计目标是处理大规模的数据分布,并提供高可用性和一致性的服务,尤其适合互联网...

Global site tag (gtag.js) - Google Analytics