Thrift 快速开始

1 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 体积更小,对于高并发、大数据量和多语言的环境更有优势。本文将以官方文档中提到的教程为例,帮助使用者快速构建服务。

2 Thrift 架构简述

下面通过一张图来说明Thrift的架构:

上面这张图展示了两个过程:

1)Thrift编译器根据IDL规则对用户定义的.thrift文件进行编译,生成不同的编程语言的接口。这一点在其它技术中称为生成Stub。

2)Thrift客户端调用服务过程:Thrift的客户端使用生成的Stub和不同语言的库文件通过网络访问服务,服务端给予响应。其中不同编程语言的类库中,都包括下面的组件:

·TTransport 是对网络传输的封装,例如Socket、Channel、IO、File等。用于控制应用程序通过底层操作系统与网络之间的数据的传输。

·TProtocol 是指应用在通信过程中使用协议。也可以理解为通信的数据格式,例如:二进制、压缩格式、JSON等。也可以这是一个序列化组件。

·应用层代码生成器:根据Thrift提供的编译器,将用户编写的的IDL定义转换为不同的代码。Thrift IDL代码生成器之于Thrift,等同于OMG IDL之于CORBA,也等同于Google Protocol Buffer IDL之于 Protocol Buffer。

3 Thrift 安装

在了解了Thrift的架构后,现在就来安装Thrift,并通过一个示例来学习一下Thrift。

安装Thrift,需要两样:Thrift的编译器相关的编程语言的类库

3.1 下载

1)下载现成的安装包:

http://thrift.apache.org/download 下,有现成的安装包,如果使用Windows系统,建议两个(thrift-version.exe 和 thrift-version.tar.gz)都下载。

以及针对Java语言有现成的Maven依赖地址。

<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.3</version>
</dependency>

或者

http://archive.apache.org/dist/incubator/thrift/  (0.6之前的版本的下载地址)和http://archive.apache.org/dist/thrift/ (0.6 之后的版本的下载地址)也可以直接下载安装包。

2)下载源码,自己构建安装包

Apache 现在的项目,也已经从SVN改成了Git管理,所以如果要通过这种方式,需要先学会Git的使用,Git的使用可以参考这里。

git clone https://git-wip-us.apache.org/repos/asf/thrift.git thrift
cd thrift

3.2 安装编译器 

1)如果通过上面的第一种方式下载的,安装过程是这样的:

在Windows系统上,已经下载是现成的编译器,就不需要做安装了。

在Linux系统上,执行:

./configure && make

在其它系统上,可以参考:http://thrift.apache.org/docs/install/

3.3 安装类库

Thrift的文档中,其实都已经说明了如何根据源码生成类库。网址是:http://thrift.apache.org/lib/

就以Java为例:

可以使用Maven,具体地址,上面已给出。

也可以解压thrift-version.tar.gz之后,到${thrift-version}/lib/java目录下使用ant进行构建。

4 官方Tutorial使用

4.1 使用编译器生成Stub

这里要说的是官方教程的使用,前提是Thrift已成功安装。

将thrift编译器与shard.thrift,tutorial.thrift(这两个文件可以在${thrift-version}/tutorial目录一找到) 放在一起,创建出shared,tutorial(这是生成的代码放置的目录)目录。例如:

然后使用Thrift的编译器生成文件。

例如:

Thrift的编译器的使用帮助可以通过thrift –help来取得,如:

生成Java代码时,可以这样:

thrift -r --gen java tutorial.thrift

这些是我在测试时生成的代码:

4.2 运行示例

示例的位置在:${thrift-0.9.3}/tutorial/java/src下。 示例中要用到的keystore文件在${thrift-0.9.3}/lib/java/test目录下。

Thrift:Quick Start的更多相关文章

  1. Visual Stuido 2010/2012 扩展:Quick Launcher,快速打开指定文件

    Visual Stuido 2010/2012 扩展:Quick Launcher,快速打开指定文件 Quick Launcher 是一个极其简单但实用的 Visual Studio 扩展,支持 Vi ...

  2. Akka Stream文档翻译:Quick Start Guide: Reactive Tweets

    Quick Start Guide: Reactive Tweets 快速入门指南: Reactive Tweets (reactive tweets 大概可以理解为“响应式推文”,在此可以测试下GF ...

  3. ZooKeeper:Quick Start

    下载.安装与配置 下载地址 安装 配置 ZooKeeper bin目录下脚本说明 Server 启动.停止 客户端操作 使用简易客户端访问 使用Java客户端访问 使用开源客户端ZkClient访问 ...

  4. [算法]——快速排序(Quick Sort)

    顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...

  5. SSISDB2:使用TSQL执行Package

    在SSISDB中,能够使用TSQL脚本执行Package:每执行一次Package,SSIS都会创建一个Operation 和一个执行实例(Execution Instance),每个Executio ...

  6. Thrift-java实例

    ➠更多技术干货请戳:听云博客 Thrift实例1 功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法. 源码截图(源码在附件中): 客户端: ...

  7. windows配置thrift开发环境

    1)安装thrift:到thrift官网下载exe文件,然后将文件重命名为thrift.exe,拷贝到c:\windows目录下(或者任何目录下),然后就可以在dos环境下使用了 c:\windows ...

  8. Thrift 的原理和使用

    thrift 的原理和使用 Thrift 架构 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过IDL(Interf ...

  9. 转:值得推荐的C/C++框架和库(真的很强大)

    目录(?)[+] 值得学习的C语言开源项目 - 1 Webbench - 2 Tinyhttpd - 3 cJSON - 4 CMockery - 5 Libev - 6 Memcached - 7 ...

随机推荐

  1. ZOJ Problem Set - 1078 Palindrom Numbers

    属于水题,主要是涉及到回文问题. 这里标注下进制转换的方法: while(n) { p[i]=n%basis; n/=basis; } 见代码: #include <stdio.h> in ...

  2. NET开发学习项目资源

    最近在整理资料时发现自己当初学习NET的一些项目资源,一直放在硬盘里不如拿来分享给初学者学习还是不错的. 项目代码为<精通ASP.NET20+SQL Server2005项目开发>书中源码 ...

  3. pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新

    使用Ajax可以异步获取数据,可以更高效地渲染页面. 但也存在这一些问题: 再刷新页面,页面就会变成初始的状态 浏览器的前进后退功能无效 对搜索引擎的爬虫抓取不友好 1. 早前会使用浏览器的 hash ...

  4. EF中的实体类型【Types of Entity in Entity】(EF基础系列篇8)

    We created EDM for existing database in the previous section. As you have learned in the previous se ...

  5. 【那些年关于MyEclipse的快捷键大全】

    MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl+1 快速修复Ctrl+D: 删除当前行 Ctrl+Q  定位到最后编辑的地方 ...

  6. 发布 Rafy 源码到 GitHub

      最近项目组开始使用 Git 来作为源码管理.我今天就顺便把 Rafy 的源码也迁移到了 github 上,方便大家使用.这是项目的地址:https://github.com/zgynhqf/raf ...

  7. failover机制的小讨论

    对于一个7*24小时无间断的线上服务来说,在服役时间内难免会遇到一些fail,例如db断开连接且短暂连接不上了, 下游的某个节点忽然挂了,运维部署上依赖的某一个东西不存在了等等场景.本文主要来讨论一下 ...

  8. Entity Framework 5.0 Code First全面学习

    摘自:http://blog.csdn.net/gentle_wolf/article/details/14004345 不贴图片了,太累. Code First 约定 借助 CodeFirst,可通 ...

  9. 基于小脚丫DDS 调频 调幅 调相 切换波形 AD5601输出模拟波形

    先讲讲里面的矩阵键盘,矩阵键盘列有下拉电阻,默认全为0000,默认行输入为1111,当有按键按下的时候,列输入会被拉高,这时控制行的输出做行扫描,电子琴用key_flag_r0电平作为使能,这里用ke ...

  10. <%@ page contentType="text/html; charset=utf-8" language="java"%>每一个字符的含义

    contentType="text/html:网页类型htmlcharset=utf-8"网页编码类型language="java"网页编程语言<% @ ...