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. .net 实现Office文件预览 Word PPT Excel 2015-01-23 08:47 63人阅读 评论(0) 收藏

    先打个广告: .Net交流群:252713569 本人QQ :524808775 欢迎技术探讨, 近期公司要求上传的PPT和Word都需要可以在线预览.. 小弟我是从来没有接触过这一块的东西 感觉很棘 ...

  2. 重启SQL Server——总是好事?

    在实际工作中,我经常看到——有时人们定期重启SQL Server!我们都希望接受,SQL Server的定期重启并不真的是一个好主意.但在今天的文章里,我想进一步讨论下,当你定期重启你的SQL Ser ...

  3. ASP.NET MVC HtmlHelper之Html.ActionLink

    前言 ActionLink用于生成超链接,方法用于指向Controller的Action. 扩展方法与参数说明 ActionLink扩展方法如下: public static MvcHtmlStrin ...

  4. .Net(c#)汉字和Unicode编码互相转换

    {"Tilte": "\u535a\u5ba2\u56ed", "Href": "http://www.cnblogs.com&q ...

  5. (1-1)文件结构的升级(Area和Filter知识总结) - ASP.NET从MVC5升级到MVC6

    ASP.NET从MVC5升级到MVC6 总目录 MVC5项目结构 带有Areas和Filter的项目结构 一般来说,小的MVC项目是不考虑领域的,但是,如果是稍微复杂一点的项目,往往是需要领域这个概念 ...

  6. java中的String

    String作为java最常用的类,被广大程序员们蹂躏已久,让我们又爱又恨,应该如何正确的使用它呢,老姜带你一起来揭开它神秘的面纱. 一.String类定义时被冠上了final的标识符,决定了它终生不 ...

  7. Lind.DDD.Domain.ISortBehavor~上移与下移

    在进行列表排序时,有个“上移”和“下移”操作,这个一般在内存里完成,然后统一提交到数据库中,对于上移与下移的设计,大叔在LIND.DDD.DOMAIN里有一个ISortBehavor接口,主要是说,如 ...

  8. ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

    ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...

  9. Json to JObject转换的使用方法

    Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和 ...

  10. ASP.NET Mvc实用框架(一)Ioc、仓储模式和单元工作模式

    Framework.EF 首先看一下这个类库: Extended文件夹存放的是EntityFramework.Extensions这个插件的源代码,没有别的原因,就是本人觉得这个插件挺好的,每次省的下 ...