Thrift实例

Apache thrift是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。

它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 等创建高效的、无缝的服务,其传输数据采用二进制格式,相对 XML 和 JSON 体积更小,对于高并发、大数据量和多语言的环境更有优势。

配置第一个thrift实例:

1、 去thrift官网 http://thrift.apache.org/tutorial/ 下载thrift压缩包和thrift编译工具thrift.exe.如图所示:

2、  安装ant和maven工具,去官网下载并配置环境变量即可。然后进入/lib/java目录下使用ant编译build.xml,(就是执行ant  build.xml,当然注意路径)可以生成libthrift-0.9.2.jar,如图所示。

3、  编译一个简单的hello服务:新建文件改名为hello.thrift(注意更改后缀名)内容如下:

namespace java service.demo 
 service Hello{ 
  string helloString(1:string para) 
 } 

Thrif文件中为服务定义了方法的接口其中包括返回值类型和参数列表,参数列表中包括参数序号、参数名和参数类型。

4、Thrift 脚本可定义的数据类型包括以下几种类型:

  • 基本类型:
    • bool:布尔值,true 或 false,对应 Java 的 boolean
    • byte:8 位有符号整数,对应 Java 的 byte
    • i16:16 位有符号整数,对应 Java 的 short
    • i32:32 位有符号整数,对应 Java 的 int
    • i64:64 位有符号整数,对应 Java 的 long
    • double:64 位浮点数,对应 Java 的 double
    • string:未知编码文本或二进制字符串,对应 Java 的 String
  • 结构体类型:
    • struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean
  • 容器类型:
    • list:对应 Java 的 ArrayList
    • set:对应 Java 的 HashSet
    • map:对应 Java 的 HashMap
  • 异常类型:
    • exception:对应 Java 的 Exception
  • 服务类型:
    • service:对应服务的类

5、进入thrift.exe所在目录执行thrift-0.9.2.exe   –gen  java hello.thrift 编译刚才写的thrift脚本就可以得到一个hello.java 文件。

6、用Java做服务器端和客户端测试服务的发布:

建立一个Java项目,将生成的hello.java 引入项目中,引入libthrift-0.9.2-snapshot.jar(第二步用ant工具编译生成的)、slf4j-api-1.5.8.jar、slf4j-log4j12-1.5.8.jar 和 log4j-1.2.14.jar四个jar包。项目如下图:

然后编写接口的实现类,服务端,客户端。

7、这里为了方便将服务器端代码和实现类写在了一起

服务器端:

package demo.rpc;

import org.apache.thrift.TException;

import org.apache.thrift.protocol.TBinaryProtocol;

import org.apache.thrift.protocol.TBinaryProtocol.Factory;

import org.apache.thrift.server.TNonblockingServer;

import org.apache.thrift.server.TServer;

import org.apache.thrift.transport.TNonblockingServerSocket;

import org.apache.thrift.transport.TNonblockingServerTransport;

import org.apache.thrift.transport.TTransportException;

import service.demo.Hello;

/**

* Thrift测试服务器

*/

public class Server implements Hello.Iface {

public static void main(String[] as) {

TNonblockingServerTransport serverTransport = null;

try {

serverTransport = new TNonblockingServerSocket(19090);

} catch (TTransportException e) {

e.printStackTrace();

}

//Server 为Hello接口的实现类

Hello.Processor<Hello.Iface> processor = new Hello.Processor<Hello.Iface>(

new Server());

Factory protFactory = new TBinaryProtocol.Factory(true, true);

TNonblockingServer.Args args = new TNonblockingServer.Args(

serverTransport);

args.processor(processor);

args.protocolFactory(protFactory);

TServer server = new TNonblockingServer(args);

System.out.println("Start server on port 19090 ...");

server.serve();

}

@Override

public String helloString(String para) throws TException {

return "hello";

}

}

客户端代码如下:package demo.rpc;

import org.apache.thrift.TException;

import org.apache.thrift.protocol.TBinaryProtocol;

import org.apache.thrift.transport.TFramedTransport;

import org.apache.thrift.transport.TSocket;

import org.apache.thrift.transport.TTransport;

import service.demo.Hello;

/**

* Thrift测试客户端

*/

public class Client {

public static void main(String[] args) {

long startTime = System.currentTimeMillis();

try {

TTransport transport = new TFramedTransport(new TSocket(

"localhost", 19090));

TBinaryProtocol protocol = new TBinaryProtocol(transport);

// TCompactProtocol protocol = new TCompactProtocol(transport);

Hello.Client client = new Hello.Client(protocol);

transport.open();

for (int i = 0; i < 1000; i++) {

System.out.println(client.helloString("login"));

}

transport.close();

} catch (TException x) {

x.printStackTrace();

}

long endTime = System.currentTimeMillis();

System.out.println(" 本次调用完成时间:" + (endTime - startTime));

}

}

8、启动服务器端,再运行客户端。控制台打印循环调用1000次服务所用时间。

thrift实例的更多相关文章

  1. Thrift-java实例

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

  2. Apache Thrift 跨语言服务开发框架

    Apache Thrift 是一种支持多种编程语言的远程服务调用框架,由 Facebook 于 2007 年开发,并于 2008 年进入 Apache 开源项目管理.Apache Thrift 通过 ...

  3. Apache Thrift 服务开发框架学习记录

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架. 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Servic ...

  4. Apache Thrift - 可伸缩的跨语言服务开发框架

    To put it simply, Apache Thrift is a binary communication protocol 原文地址:http://www.ibm.com/developer ...

  5. Apache Thrift学习之二(基础及原理)

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详细介绍 Apache Thrift 的架构.开发和部署,并且 ...

  6. JaveWeb 公司项目(3)----- 通过Thrift端口获取数据库数据

    前面两篇博客的内容主要是界面搭建的过程,随着界面搭建工作的完成,网页端需要加入数据,原先的B/S架构中C#通过Thrift接口获取数据,所以在网页端也沿用这个设计 首先,新建一个Maven下的Web项 ...

  7. 【转载】Thrift概述

    来自 <https://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/#ibm-pcon> 一个简单的 Thrift 实例 首先 ...

  8. thrift框架总结,可伸缩的跨语言服务开发框架

    thrift框架总结,可伸缩的跨语言服务开发框架 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其 ...

  9. 【转】Apache Thrift - 可伸缩的跨语言服务开发框架

    Apache Thrift - 可伸缩的跨语言服务开发框架 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详 ...

随机推荐

  1. homebrew代理设置

    方法一 brew用curl下载,所以给curl挂上socks5的代理即可. 在~/.curlrc文件中输入代理地址即可. socks5 = "127.0.0.1:1080" 方法二 ...

  2. 1084. Broken Keyboard (20)【字符串操作】——PAT (Advanced Level) Practise

    题目信息 1084. Broken Keyboard (20) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B On a broken keyboard, some of ...

  3. perl一次读取多行文本的策略

    在处理文本时,经常遇到这种情况:就是我们须要把两行文本做一个比較,然后选择性输出. 而在while(<FILEHAND>){do something}程序块中默认仅仅能一次读取一行.笔者在 ...

  4. 前后台JSON传值得一个问题和异常处理net.sf.json.JSONException: Unquotted string '"name"'

    项目中做导入的时候遇到个bug,用JSON.stringify()序列号json对象传给后台:然后后台通过getPatameter()获取值时,前台的英文引号变成了中文引号. 原来代码如下:(自己排查 ...

  5. 【原创】关于bug反正出现的问题可能

    bug修正的问题:1. xib问题.2. 模块不清同时修改.3. svn代码合并的修改熟悉程度.4. 禁止全局格式化代码.

  6. Microsoft Sync Framework 2.1 可再发行程序包 Microsoft Sync Framework 1.0 SP1 - 中文(简体)

    Sync Framework 2.1 引入了新功能,这些功能支持您计算机上的 SQL Server 或 SQL Server Compact 数据库与 SQL Azure 数据库进行同步.此发行版还引 ...

  7. bc的用法

    bc是An arbitrary precision calculator language,即一个任意精度的计算语言,注意是一种语言,它提供了一些语法结构,比如条件判断.循环等,可以说是很强大的,但是 ...

  8. Application provided invalid, non monotonically increasing dts to muxer in stream

    很多同学在使用Ffmpeg过程中都遇到Application provided invalid, non monotonically increasing dts to muxer in stream ...

  9. .net core 2.0小白笔记(一):开发运行环境搭建

    小白一枚,有任何不妥之处敬请指教 这里不讨论什么设计模式,什么架构,什么什么,就是入门,简单的入门,虽然能跨平台,但是这里还是在win的环境下进行,不扯的那么远 其实官网文档写的挺不错的了,就是偶尔有 ...

  10. CentOS修改IP地址及关闭/打开防火墙

    1.CentOS修改IP地址: # ifconfig eth0 192.168.1.80 这样就把IP地址修改为192.168.1.80(如果发现上不了网 了,那么你可能需要把网关和DNS也改一下,后 ...