博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thrift 安装及使用
阅读量:6976 次
发布时间:2019-06-27

本文共 3278 字,大约阅读时间需要 10 分钟。

前言:由于最近在看storm Topology提交过程的源代码,写好的topology jar文件是通过Thrift RPC的形式提交给nimbus的。故了解下Thrift的基本原理。

参考:http://dongxicheng.org/search-engine/thrift-rpc/

1,环境:Ubuntu12.04   thrift-0.9.2。安装:

①下载安装包并解压,假设解压到/usr/lcoal/thrift-0.9.2/

②安装依赖

sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libboost-system-dev libboost-filesystem-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev

3,在/usr/lcoal/thrift-0.9.2/运行如下命令:

./configure && make && make install

奇怪的是这里报了个错误:

thrift-t_gv_generator.o: file not recognized: File truncatedcollect2: ld returned 1 exit statusmake[3]: *** [thrift] 错误 1make[3]:正在离开目录 `/usr/local/thrift-0.9.2/compiler/cpp'

找到出错的文件,发现它的大小为0,然后直接把它移除,再重新运行第 3 步中的命令。安装成功。

4,Using Thrift with Java..在JAVA中使用Thrift,这里需要Java Thrift 库。该java Thrift库的编译非常简单:

参考:http://thrift.apache.org/lib/java。。。

在/usr/lcoal/thrift-0.9.2/lib/java/ 下运行 ant 即可,生成了一个libthrift-0.9.2.jar文件,就可以把该jar包导入到java工程中作为Thrift for java的依赖包了。

补充一下:在由Thrift IDL语言定义好**.thrift 文件,运行 thrift --gen java **.thrift 就可以生成相应的JAVA文件。把该JAVA文件导入到JAVA工程中,还需要slf4j-api-1.5.8.jar 、slf4j-log4j12-1.5.8.jar 、log4j-1.2.14.jar

5,Thrift for java 之 eclipse编程实例

参考:http://blog.csdn.net/jun55xiu/article/details/8988429

①定义好thrift文件--Hello.thrift 并生成相应的java代码

thrift文件如下:

service Hello{    string helloString(1:string para)    i32 helloInt(1:i32 para)}

生成的java部分代码如下:

public class Hello {  public interface Iface {    public String helloString(String para) throws org.apache.thrift.TException;    public int helloInt(int para) throws org.apache.thrift.TException;  }  public interface AsyncIface {    public void helloString(String para, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;

②编写HelloServiceImpl接口实现thrift文件中定义的服务

import org.apache.thrift.TException;public class HelloServiceImpl implements Hello.Iface{    public String helloString(String para) throws TException {        return para;    }    public int helloInt(int para) throws TException {        try{            Thread.sleep(2000);        }catch(InterruptedException e){            e.printStackTrace();        }        return para;    }}

③编写服务器端程序,部分代码如下:

TServerSocket serverTransport = new TServerSocket(7911);//设置服务器端口            Factory proFactory = new TBinaryProtocol.Factory();//设置协议工厂            TProcessor processor = new Hello.Processor
(new HelloServiceImpl());//关联处理器与Hello.thrift文件中定义的服务的实现 TServer.Args tArgs = new TServer.Args(serverTransport); tArgs.processor(processor); tArgs.protocolFactory(proFactory); TServer server = new TSimpleServer(tArgs); System.out.println("Start server on port 7911"); server.serve();

④编写客户端程序

TTransport transport = new TSocket("localhost",7911);//建立连接            transport.open();            TProtocol protocol = new TBinaryProtocol(transport);            Hello.Client client = new Hello.Client(protocol);//生成客户端实例对象            client.helloString("Hello World");//调用定义好的服务            client.helloInt(88);//调用定义好的服务

 

 ⑤总结:

1,使用IDL语言写好接口定义thrift文件,该文件指明了服务器端提供的各种服务。2,通过thrift --gen java/c++/py/... <thrift file> 生成相应语言的代码。

3,用户实现具体的服务--服务器端程序、客户端程序。。。客户端调用服务,服务器端提供服务。

4,至于整个传输过程则被Thrift封装起来了--protocol 定义数据传输格式,transport 定义数据传输方式。

 

你可能感兴趣的文章
oracle 好书( 09 对象管理 )
查看>>
网站是否有播放音乐功能
查看>>
架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)
查看>>
web开发中的 emmet 效率提升工具
查看>>
41、java与mysql乱码的问题
查看>>
细说 Form (表单)
查看>>
在Web应用和IntelliJ IDEA中使用Spring框架
查看>>
用缓动函数模拟物理动画
查看>>
MongoDB索引相关文章-摘自网络
查看>>
RBAC权限设计图 [转]
查看>>
2017Windows下安装pip
查看>>
用JAVA发送一个XML格式的HTTP请求
查看>>
GraphicsStatsService之2 UI绘制的时间信息来源
查看>>
深入理解Hystrix之文档翻译
查看>>
[译]官方图解:Chrome 快是有原因的,现代浏览器的多进程架构!(Part 1)
查看>>
java 知识点
查看>>
图片查看器 PhotoView
查看>>
阿里架构师经验分享:Java程序员5年职业路线指南
查看>>
老司机 iOS 周报 #8
查看>>
零客户端开发经验 React Native 热更新 CodePush 打包集成指北
查看>>