为什么80%的码农都做不了架构师?>>>   

Thrift是什么,看这里:http://thrift.apache.org/

1.从官网下载thrift

  Thrift官网:http://thrift.apache.org/,Windows 和 Linux请分别下载不同的版本。 在Windows上,将下载的压缩文件解压后,放到一个文件夹下,并为其配置环境变量,以便以后可以直接从命令行启用它。注意:在网上找找,将libthrift-0.9.0.jar和slfj-api-1.7.2.jar一起放入我们项目的lib文件夹下,并添加到项目的buildpath中,因为thrift生成的java文件中,将会引用到这两个包中的类。

2.编写thrift文件

  thrift文件是一个文本文件,文件名自定义,后缀也自定义。但是为了方便理解,建议后缀写为:.thrift。一个thrift文件(Person.thrift)像下面这样:

namespace java com.abc.gen
struct Person{1:i32 id;2:string name;3:int age;4:bool married;
}
service PersonService {Person getPersonById(1:i32 id) ,bool deletePersonById(1:i32 id )
}

  这个文件中,namespace描述了生成的类的包名;struct用于定义一种结构体(在Java中叫做对象),thrift将生成这个Person对象,Person对象中定义了几个基本的属性。service用于定义“服务”,这些“服务”将以接口的方式生成在类中。我们需要做的,就是待thrift为我们生成相应的文件之后,去实现这些接口。

3.用thrift生成自定义的类

  使用命令:thrift -r -gen java Person.thrift 来生成我们需要的类。

  其中-r表示递归,如果这个Person.thrift文件中又引用了其他thrift文件中定义的对象,那么在生成的时候,将会把引用的对象的thrift文件中定义的所有对象一起生成。

  -gen Java 表示生成的是java语言的文件,最后一个参数表示定义thrift对象和服务的文件。

4.实现生成的接口

  根据以上的thrift文件,生成之后的文件有Person.java和PersonService.java,其中PersonService.java类中有一个Iface接口,这个接口就是我们需要实现的。我们把这两个生成的Java类复制到我们的项目包中待用。现在,新建一个类PersonServiceImpl,这个类实现了PersonService.Iface。这里以方法getPersonById为例,为了简单起见,直接在PersonServiceImpl的getPersonById中new一个Person对象,设置相关的属性并返回。如下:

import org.apache.thrift.TException;
import com.abc.gen.Person;
import com.abc.gen.PersonService;
public class PersonServiceImpl implements PersonService.Iface {@Overridepublic Person getPersonById(int id) throws TException {Person p = new Person();p.setId(id);p.setAge(20);p.setName("name");p.isMarried(false);return p;}@Overridepublic boolean deletePersonById(int id) throws TException {// TODO Auto-generated method stubreturn false;}
}

  其中这两个复写的接口,就是我们在Person.thrift中定义的service。

5.编写ThriftServer

import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import com.abc.gen.PersonService;
import com.abc.impl.PersonServiceImpl;
public class ThriftServer {public static void main(String[] args) {PersonService.Processor processor = new PersonService.Processor(new PersonServiceImpl());try{TServerTransport serverTransport = new TServerSocket( new InetSocketAddress("127.0.0.1",9999));Args trArgs=new Args(serverTransport);trArgs.processor(processor);TServer server = new TThreadPoolServer(trArgs);System.out.println("Thrift服务已开启...");server.serve();server.stop();System.out.println("Thrift服务已停止...");}catch(Exception e){throw new RuntimeException("thrift服务启动失败"+"\n"+e.getMessage());}}
}

6.编写ThriftClient

import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import com.abc.gen.Person;
import com.abc.gen.PersonService;
public class ThriftClient {public static void main(String[] args) throws TException {TTransport transport = new TSocket("127.0.0.1",9999);long start=System.currentTimeMillis();TProtocol protocol = new TBinaryProtocol(transport);PersonService.Client client=new PersonService.Client(protocol);transport.open();System.out.println("调用开始...");Person person = client.getPersonById(1);System.out.println("调用结果:" + person.toString());transport.close();System.out.println("消耗时间:" + (System.currentTimeMillis()-start) + "ms");}
}

7.调用

  先启动ThriftServer,在启动ThriftClient,这时会看到以下内容:

Thrift服务已开启...  
调用开始...
调用结果:Person(id:1, name:name, age:20, married:false)
消耗时间:115ms

转载于:https://my.oschina.net/itblog/blog/204126

Apache Thrift的使用相关推荐

  1. RPC框架实践之:Apache Thrift

    一.概述 RPC(Remote Procedure Call)即 远程过程调用,说的这么抽象,其实简化理解就是一个节点如何请求另一节点所提供的服务.在文章 微服务调用链追踪中心搭建 一文中模拟出来的调 ...

  2. Apache Thrift - java开发详解

    2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...

  3. Windows 10 Visual Studio 2017 安装配置 Apache Thrift (C++)

    最近需要使用Thrift,所以在网上看了很多资料,不过很多教程都不够详细完整,导致我花了不少时间安装配置.在这里我把我配置的过程写下来和大家分享. 1 介绍 Apache Thrift 是一个跨语言的 ...

  4. [zz]Apache Thrift学习小记

    参考: http://incubator.apache.org/thrift/ http://wiki.apache.org/thrift/FrontPage http://jnb.ociweb.co ...

  5. Apache Thrift使用简介

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.和其它RPC框架相比,它主要具有如下连个特点: 高性能. 它采用的是二进制序列化,并且用的是长 ...

  6. 基于Apache Thrift的公路涵洞数据交互实现原理

    基于Apache Thrift的公路涵洞数据交互实现原理 Apache Thrift简介 Apache Thrift(以下简称为"Thrift") 是 Facebook 实现的一种 ...

  7. 在hive的beeline下,Error: org.apache.thrift.transport.TTransportException: java.net.SocketException: Bro

    Error: org.apache.thrift.transport.TTransportException: java.net.SocketException: Brok en pipe (Writ ...

  8. Hive belline提交命令Error: org.apache.thrift.transport.TTransportException: java.net.SocketException:

    Error: org.apache.thrift.transport.TTransportException: java.net.SocketException: Brok en pipe (Writ ...

  9. Exception in thread main org.apache.thrift.transport.TTransportException: Could not create ServerS

    Exception in thread "main" org.apache.thrift.transport.TTransportException: Could not crea ...

最新文章

  1. Spacebuilder在Mono上运行修改备忘
  2. 删除临时表并且插入数据
  3. XMLHttpRequest Level 2 使用指南
  4. 【大话设计模式】设计模式系统学习大合集
  5. C++ 常用设计模式
  6. wepyjs小程序组件调用pages页面的方法
  7. 如何在Mac OSX系统下安装Tomcat
  8. 深度学习:语义分割网络U-Net
  9. 最全面测试计划书模板
  10. 转置矩阵,矩阵的行列式,伴随矩阵,逆矩阵的概念及C#求解
  11. html黑洞效果,HTML5 Canvas炫酷宇宙黑洞引力特效
  12. C4D常用操作——挤压+倒角详解
  13. 【Eye-Tracking】一、眼动追踪概述
  14. ipynb转pdf的一种较完美解决方案
  15. 求曲线面积的原理(微积分入门)
  16. Amazon SageMaker助力德比软件提高酒店房态查询准确率
  17. i++和++i为毛会不一样
  18. 第二章 源力、质量、能量
  19. mysql查询最高分学生年龄_MySQL练习题student_score
  20. 51单片机控制的自动感应调光、坐姿矫正智能台灯

热门文章

  1. 实践操作--云端深度学习工作站配置指南(转)
  2. ADS2017打开出现cannot create the directory,解决办法。
  3. 问题 | CondaHTTPError: HTTP 404 NOT FOUND for url
  4. WCHAR,CHAR,TCHAR的区别
  5. strnicmp,strncmpi方法
  6. oracle 性别 函数索引优化,oracle优化记录4_改写函数索引列
  7. php作业90,php中文网移动端-第九期(191107作业)
  8. 怎么做 空间杜宾模型_面板数据空间杜宾模型
  9. c++计算eigen随笔(10)-数组、矩阵、向量(3)
  10. 天池项目总结,特征工程了解一下!(文末送书)