Thrift 安装及使用
前言:由于最近在看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 truncated
collect2: ld returned 1 exit status
make[3]: *** [thrift] 错误 1
make[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<Hello.Iface>(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 定义数据传输方式。
Thrift 安装及使用的更多相关文章
- thrift安装及python和c++版本调试
一.安装过程 1.安装依赖库 ]# yum install boost-devel-static libboost-dev libboost-test-dev libboost-program-opt ...
- Mac上brew&thrift安装 以及在thrift架构下,自己新作了maven的小例 Demo
1.缘由 前几天偶尔在网上看到thrift的信息,其内容和作用极大的引起了我的兴趣,因为我也是做iOS开发的,通过在网上的查询发现信息虽然很多实用的很少,容易误导他人,经过自己的成功实践,做了笔录,为 ...
- thrift安装及常见问题
一.安装thrift (macOS / Linux) 1. 下载thrift0.10.0源码 https://github.com/apache/thrift/releases/tag/0.10.0 ...
- 【Thrift一】Thrift安装部署
Thrift安装部署 Thrift安装部署 下载源码包 安装g++ 解压Thrift安装包 安装boost开发工具 测试(python版) 下载源码包 wget http://apache.fayea ...
- Thrift安装介绍
一.简介 1.语言库要求 因为thrift支持多语言.所以编译thrift源代码的过程中,会用到该语言的一些类库.如c++的boost.java的jdk等. 那么,在安装thrift过程中,须要对各种 ...
- thrift 安装介绍
一.About thrift thrift是一种可伸缩的跨语言服务的发展软件框架.它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Ja ...
- Windows Thrift安装及HelloWorld
Thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.org 跨 ...
- Thrift入门初探--thrift安装及java入门实例
什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...
- Openresty使用Thrift安装步骤
最新想用Golang与Openresty相互通讯调用,使用RPC协议来实现,后来研究最终选择了Thrift:主要还是FB实现了支持Lua和Go模块,直接编译就可以成功嵌套使用,非常方便:研究了两天最后 ...
- golang高性能RPC:Apache Thrift安装使用完全攻略
在企业应用中RPC的使用可以说是十分的广泛,使用该技术可以方便的与各种程序交互而不用考虑其编写使用的语言. 如果你对RPC的概念还不太清楚,可以点击这里. 现今市面上已经有许多应用广泛的RPC框架,比 ...
随机推荐
- Oracle数据库SQLPLUS 连接显示 ??? 的解决
linux下 安装了中文版本的,造成sqlplus 连接时出现了乱码 如图 一开始以为是LANG 变量的问题 后来发现是NLS_LANG的问题 解决方法: export NLS_LANG=" ...
- 属性动画总结(Property Animation)
一.概述 属性动画可以作用在View的属性上,对属性进行修改,而且不要求对应的属性一定是有显示效果的. 二.属性动画的实现方式 1.基础的类Animator Animator是一个抽象类,是属性动画的 ...
- Angular factory自定义服务
<!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...
- linux shell << 注释多行
#!/bin/bash #script name: a.sh #author: aaron <<EOF echo "line 1" echo "line 2& ...
- 无需破解:Windows Server 2008 R2 至少免费使用 900天
无需破解:Windows Server 2008 R2 至少免费使用 900天 2009年10月30日 星期五 02:10 1.首先安装后,有一个180天的试用期. 2.在180天试用期即将结束时,使 ...
- POJ3273-Monthly Expense-二分答案
FJ对以后的每一天会花mi块钱,他想把这些天分成M个时段,然后每个时段的花费和最小. 二分答案,如果加上这天还没有达到mid,就加上它.之后看分成的时段是否大于M #include <cstdi ...
- Java 8新特性之 Base64(八恶人-7)
"General" 我是个将军 “ You, sir a hyena. I hava no wish to speak to you.” “你就是一个土狗,你不配跟我说话” 一. ...
- NOI2018退役记
NOI2018退役记 终于我也退役了-- Day0 高中毕业前最后一次坐飞机了--在机场干什么呢?当然是打元气打元气打元气.下飞机干什么呢?当然是打元气打元气打元气. 有接机服务,大巴上有个导游,又向 ...
- [luogu4268][bzoj5195][USACO18FEB]Directory Traversal
题目大意 给你\(n\)个文件的关系,求出某一个点,这个点到叶节点的长度的总距离最短.(相对长度的定义在题目上有说明) 感想 吐槽一下出题人,为什么出的题目怎么难看懂,我看了整整半个小时,才看懂. 题 ...
- FreeRTOS不允许在中断服务程序和临界段中执行不确定的性的操作
举例 等待事件标志组的任务,要是在中断服务程序中设置事件标志组,但不知道当前有多少个任务在等待此事件标志,这个操作即为不确定性操作,为了不在中断服务程序中执行此不确定性操作,只在中断服务程序中给一确定 ...