一、什么是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作为可伸缩的跨语言服务开发框架,网上的资源较少,这里是一个简单的入门小程序,文件中的mylib下包含了依赖的jar包,并且在file目录下放了一个简单的thrift文件和生成thrift-0.9.0.exe工具,直接使用 thrift-...
通俗简单的介绍了什么是thrift,适用于thrift或RPC扫盲。
压缩包分为三个部分,java工程(java的服务方,和java客户端) ...linux环境的服务方部署包以及脚本 其中myserver.tar.gz压缩包是linux环境的部署包, ...当然也可以直接导入java目录下的java工程,直接运行服务端更简单
本文档主要介绍thrift的入门与配置及简单应用
C#使用Thrift2访问Hbase库,实现了简单的增、删、改、查。 便于大家快速入门。
特利纳特拉通过 Finatra、Spindle、Heroku 和 Bootstrap 使用 Thrift 和 Mongo 的简单 Scala Web 服务器模板入门 export THRINATRA_APP="thrinatra" # Put the name of your app heregit clone ...
YY后台编程入门小小小指南 一 最简单的daemon进程的编写 2 1.1 main函数代码: 2 1.2 Makefile文件的编写 3 1.3.如何查看进程在已经daemon体系中运行 4 1.4 如何查看日志。 5 二、读配置文件的daemon进程编写 5 2.1 ...
Thrift。Apache出品 3. Dubbo。阿⾥出品,也是⼀个微服务框架 gRPC的特性 的特性 看的介绍,有以下4点特性: 1. 使⽤Protocal Buffers这个强⼤的结构数据序列化⼯具 2. grpc可以跨语⾔使⽤ 3. 安装简单,扩展⽅便...
给出一份我们日常都可以接触到的数据样例,先简单给出示例数据的字段定义:示例数据字段定义本文力求简洁,仅给出了最简单的几个字段定义。如下是”虚构”的样例数据:示例数据在本文大部分内容中所涉及的一条数据,...
接触Thrift后简单写的一个测试例程,前前后后的用了N种的情形去模拟和测试,所以代码有点乱,但是基础的用法还是可以通过代码看出来的,简单做个入门是没问题的,C#和python交互环境测试正常,高手绕道
第一部分 NoSQL入门 第1章 NoSQL的概念及适用范围 2 1.1 定义和介绍 3 1.1.1 背景与历史 3 1.1.2 大数据 5 1.1.3 可扩展性 7 1.1.4 MapReduce 8 1.2 面向列的有序存储 9 1.3 键/值存储 11 1.4 文档数据库 ...
一个简单的示例 基本概念 依赖 初始化 StreamingContext Discretized Streams(DStreams)(离散化流) Input DStreams 和 Receivers DStreams 上的 Transformations(转换) DStreams 上的输出操作 ...
使用Mysql构建简单数据集市29#Mysql的两种引擎介绍29#创建一个数据表使用Hive cli 进行数据分析29#使用shell 编写Hsql 并使用HiveCli导出数据,使用Mysql命令加载到数据库中。29#使用crontab 新增每日运行任务定时器...
Atomikos曾介绍使用TCC作为微服务的分布式事务解决方案,有一篇简单的译文可作为入门资料。经文章叙述,Atomikos所设计的TCC交互完全整合在HTTP协议之上,并充分地替代了HTTP语义特性,是一个与应用层协议紧接解决...