一、什么是thrift
Thrift的官网http://thrift.apache.org/download/。Thrift是由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 等创建高效的、无缝的服务,其传输数据采用二进制格式,相对 XML 和 JSON 体积更小,对于高并发、大数据量和多语言的环境更有优势
二、安装
这里是windows下的安装过程
1、下载
主页下载最新的release包https://dist.apache.org/repos/dist/release/thrift/0.9.0/thrift-0.9.0.tar.gz
和windows下的编译文件,该文件负责将idl文件编译成各种语言的代码:https://dist.apache.org/repos/dist/release/thrift/0.9.0/thrift-0.9.0.exe
2、作为java的实现语言
如果是maven管理需要加入依赖:
<dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.9.0</version> </dependency>
3、作为python的实现语言
在windows下需要语言安装python是必须的,同时需要有安装模块的工具,这里用setuptools:根据具体的平台找到相应的工具,这里用:http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11.win32-py2.7.exe#md5=57e1e64f6b7c7f1d2eddfc9746bbaf20下载后安装,将python安装目录下的script设置为windows的PATH变量,如
接下来进入到解压后thrift的release包目录,如F:\thrift\thrift-0.9.0\lib\py,在命令控制台运行:
setup.py install
即完成了安装
三、简单的实例
根据IDL语言编写thrift的描述文件Hello.thrift
namespace java org.java.codelib.thrift.sample service Hello { i32 add(1:i32 para1, 2:i32 para2), void sayHello(1:string name); }
- 其中namespace指明了包结构,这里会生成的java包为org.java.codelib.thrift.sample
- service相当于java中的接口描述,会将Hello生成具体语言的接口
- add和sayHello声明了两个方法:其中add接收两个参数并返回结果,而sayHello接收string类型的参数,这里的参数类型string、i32等与java中的String、int类似
利用thrift-0.9.0.exe文件编译成java实现代码:
thrift-0.9.0.exe --gen java Hello.thrift
这样在目录下生成了gen-java的文件夹,包含了java的实现代码Hello.java
接下来需要实现Hello.java文件中的Hello.Iface 接口:
public class HelloImpl implements Hello.Iface { @Override public int add(int para1, int para2) throws TException { return para1 + para2; } @Override public void sayHello(String name) throws TException { System.out.println("Hello Thrift From " + name); } }
创建服务端代码:
public class HelloServiceServer { /** * @param args * @author Administrator * @date 2013-1-26 */ public static void main(String[] args) { try { // 设置服务端口为 7911 TServerSocket serverTransport = new TServerSocket(7911); // 设置协议工厂为 TBinaryProtocol.Factory Factory proFactory = new TBinaryProtocol.Factory(true, true); // 关联处理器与 Hello 服务的实现 Hello.Processor<HelloImpl> processor = new Hello.Processor<HelloImpl>(new HelloImpl()); Args arg = new Args(serverTransport); arg.processor(processor); arg.protocolFactory(proFactory); TServer server = new TSimpleServer(arg); server.serve(); System.out.println("Start server on port 7911..."); } catch (TTransportException e) { e.printStackTrace(); } } }
下面是客户端的代码:
public class HelloServiceClient { /** * @param args * @author Administrator * @date 2013-1-26 */ public static void main(String[] args) { TTransport transport; try { transport = new TSocket("localhost", 7911); TProtocol protocol = new TBinaryProtocol(transport); Hello.Client client = new Hello.Client(protocol); transport.open(); System.out.println(client.add(12, 20)); client.sayHello("robin"); transport.close(); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { e.printStackTrace(); } } }
先运行服务端的代码,再运行客户端就可以在控制台看到相应的输出。这样就完成了一个thrift的简单实例
四、Thrift架构简介
这是thrift的架构图:
- 黄色部分是用户实现的业务逻辑,
- 褐色部分是根据Thrift 定义的服务接口描述文件生成的客户端和服务器端代码框架,
- 红色部分是根据Thrift 文件生成代码实现数据的读写操作。
- 红色部分以下是 Thrift 的传输体系、协议以及底层 I/O 通信,使用 Thrift 可以很方便的定义一个服务并且选择不同的传输协议和传输层而不用重新生成代码
下面是thrift的网络协议栈:
+-------------------------------------------+ | Server | | (single-threaded, event-driven etc) | +-------------------------------------------+ | Processor | | (compiler generated) | +-------------------------------------------+ | Protocol | | (JSON, compact etc) | +-------------------------------------------+ | Transport | | (raw TCP, HTTP etc) | +-------------------------------------------+
相关推荐
一个简单的节俭文件。 一种服务扩展了另一种服务,并且存在异常。 目的是在尽可能小的空间内呈现出许多深奥的案例。 产生节俭服务 注意main.go顶部的//go:generate语句。 这是使用go generate运行的,并将为我们定义...
### Thrift初级入门教程 #### 一、简介 Thrift 是由 Facebook 开发的一款软件库和一组代码生成工具,旨在加速高效且可扩展的后端服务的开发与实现。通过抽象出不同编程语言中最常用的部分,并将其封装进一个通用库...
### Thrift入门学习教程 #### 一、Thrift概述 Thrift是由Facebook开发并在2007年贡献给Apache基金会的一款开源项目。它的主要目的是解决跨平台、跨语言的系统间大数据量传输通信问题。在早期,Facebook面临着系统...
Thrift作为可伸缩的跨语言服务开发框架,网上的资源较少,这里是一个简单的入门小程序,文件中的mylib下包含了依赖的jar包,并且在file目录下放了一个简单的thrift文件和生成thrift-0.9.0.exe工具,直接使用 thrift-...
Thrift的目标是高效、简单、可扩展,适用于构建大型分布式系统中的服务通信。 在Thrift的核心概念中,主要有以下几个关键点: 1. **IDL(Interface Definition Language)**:Thrift使用自己的接口定义语言(IDL)...
1. TBinaryProtocol:简单易用的二进制格式,处理速度快,但不便于调试。 2. TCompactProtocol:紧凑的二进制格式,效率高且占用空间小。 3. TDebugProtocol:可读性高的文本格式,适用于调试。 4. TDenseProtocol:...
通俗简单的介绍了什么是thrift,适用于thrift或RPC扫盲。
在"Thrift入门及Java实例演示"中,我们可以预期学习到以下核心知识点: 1. **Thrift IDL**:Thrift的接口定义语言类似于C++或Java的接口,用于定义服务、结构体、异常和枚举等。例如,你可以定义一个简单的服务,...
默认使用TBinaryProtocol,这是一种简单的二进制协议,适合高效的数据交换。 4. **服务模型**: Thrift提供了两种服务模型——阻塞式(Blocking)和服务端异步(Non-Blocking/Sync)。阻塞式服务在处理每个请求时...
压缩包分为三个部分,java工程(java的服务方,和java客户端) ...linux环境的服务方部署包以及脚本 其中myserver.tar.gz压缩包是linux环境的部署包, ...当然也可以直接导入java目录下的java工程,直接运行服务端更简单
首先,`Thrift简介.docx`可能是关于Thrift的入门文档,介绍了Thrift的概念、特点和用途。Thrift的主要特点包括高效、类型安全以及支持多种编程语言,如Java、C++、Python等。它通过定义服务接口,使得不同语言之间...
Thrift的编译器会生成客户端和服务端的代码,使得在C#中调用HBase服务变得简单。 接下来,为了在C#中使用Thrift2连接到HBase,你需要完成以下步骤: 1. **安装Thrift**: 首先,你需要在开发环境中安装Thrift工具,...
通常,这样的博客文章会提供一个简单的Thrift入门教程,包括如何安装Thrift工具,定义Thrift IDL文件,以及如何生成和使用Java代码进行服务端和客户端的开发。 标签 "源码" 和 "工具" 提醒我们,Thrift涉及到编程...
通过这种方式,`maven-thrift-client` 提供了一个快速入门的模板,帮助开发者高效地创建和管理基于 Thrift 的客户端应用程序。它使得在 Maven 项目中使用 Thrift 变得简单,降低了跨语言服务开发的门槛。
Hadoop之HBase从入门到精通 本文将详细介绍HBase技术,从基础概念到高级应用,旨在帮助读者快速掌握HBase技术。 一、HBase技术介绍 HBase是Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储...
特利纳特拉通过 Finatra、Spindle、Heroku 和 Bootstrap 使用 Thrift 和 Mongo 的简单 Scala Web 服务器模板入门 export THRINATRA_APP="thrinatra" # Put the name of your app heregit clone ...
**protobuf入门知识点** protobuf,全称Protocol Buffers,是由Google开发的一种数据序列化协议,用于高效、跨平台地存储和传输结构化数据。它提供了一种语言中立、平台中立的方式来定义数据结构,可以将数据结构...
### HBase从入门到精通——关键技术点解析 #### 一、HBase技术概览 **HBase**(Hadoop Database)是一种分布式、可扩展的NoSQL数据库系统,它基于Google Bigtable论文的思想构建而成,并且作为Apache Hadoop生态...
"Hadoop之Hbase从入门到精通" HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。HBase 是 Google Bigtable 的开源实现,类似 ...
### Hadoop之Hbase从入门到精通 #### HBase技术介绍与概述 HBase是一种分布式、高可靠性且高性能的列式存储系统,它基于Hadoop生态体系构建,并且能够支持大规模的数据存储需求。HBase的设计灵感来源于Google的...