前言:由于最近在看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 安装及使用的更多相关文章

  1. thrift安装及python和c++版本调试

    一.安装过程 1.安装依赖库 ]# yum install boost-devel-static libboost-dev libboost-test-dev libboost-program-opt ...

  2. Mac上brew&thrift安装 以及在thrift架构下,自己新作了maven的小例 Demo

    1.缘由 前几天偶尔在网上看到thrift的信息,其内容和作用极大的引起了我的兴趣,因为我也是做iOS开发的,通过在网上的查询发现信息虽然很多实用的很少,容易误导他人,经过自己的成功实践,做了笔录,为 ...

  3. thrift安装及常见问题

    一.安装thrift (macOS / Linux) 1. 下载thrift0.10.0源码 https://github.com/apache/thrift/releases/tag/0.10.0 ...

  4. 【Thrift一】Thrift安装部署

    Thrift安装部署 Thrift安装部署 下载源码包 安装g++ 解压Thrift安装包 安装boost开发工具 测试(python版) 下载源码包 wget http://apache.fayea ...

  5. Thrift安装介绍

    一.简介 1.语言库要求 因为thrift支持多语言.所以编译thrift源代码的过程中,会用到该语言的一些类库.如c++的boost.java的jdk等. 那么,在安装thrift过程中,须要对各种 ...

  6. thrift 安装介绍

    一.About  thrift            thrift是一种可伸缩的跨语言服务的发展软件框架.它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Ja ...

  7. Windows Thrift安装及HelloWorld

    Thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.org 跨 ...

  8. Thrift入门初探--thrift安装及java入门实例

    什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...

  9. Openresty使用Thrift安装步骤

    最新想用Golang与Openresty相互通讯调用,使用RPC协议来实现,后来研究最终选择了Thrift:主要还是FB实现了支持Lua和Go模块,直接编译就可以成功嵌套使用,非常方便:研究了两天最后 ...

  10. golang高性能RPC:Apache Thrift安装使用完全攻略

    在企业应用中RPC的使用可以说是十分的广泛,使用该技术可以方便的与各种程序交互而不用考虑其编写使用的语言. 如果你对RPC的概念还不太清楚,可以点击这里. 现今市面上已经有许多应用广泛的RPC框架,比 ...

随机推荐

  1. 一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS

    一台服务器,两个域名 首先购买https,获取到CA证书,两个域名就得到两套证书 第二步:现在就是Nginx和OpenSSL的安装与配置(这里注意,一般情况下一个IP只支持一个SSL证书,那么我们现在 ...

  2. 转载《ionic 热更新 cordova-hot-code-push》

    cordova-hot-code-push ,Cordova热代码推送插件提供了在应用程序中执行基于Web的内容的自动更新的功能.使用此插件可以更新存储在项目的www文件夹中的所有内容. cordov ...

  3. 转《js闭包与内存泄漏》

    首先,能导致内存泄漏的一定是引用类型的变量,比如函数和其他自定义对象.而值类型的变量是不存在内存泄漏的,比如字符串.数字.布尔值等.因为值类型是靠复制来传递的,而引用类型是靠类似c语言中的指针来传递的 ...

  4. 初学者学习C++的50条忠告

    1.把C++当成一门新的语言学习(和C没啥关系!真的.); 2.看<Thinking In C++>,不要看<C++变成死相>; 3.看<The C++ Programm ...

  5. Intel处理器缺货将会持续到2019年第二季度!

    虽然Intel一再承诺加大投资.扩充产能,但一个不争的事实是,Intel处理器仍然都处于大面积紧张的缺货状态中,毕竟10nm迟迟无法规模量产,14nm上拥挤了太多产品线. 按照华硕CEO沈振来的最新说 ...

  6. ansible系列8-SSH连接和执行性能优化

    1. 当你的SSH的版本高于5.6时 我们可以直接修改 /etc/ansible/ansible.cfg里面的参数 ssh_args = -C -o ControlMaster=auto -o Con ...

  7. bzoj 3295 动态逆序对 (三维偏序,CDQ+树状数组)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用 ...

  8. MT【240】6*6放黑白子

    $6*6$的方格中放三个完全相同的黑子和三个完全相同的白子,要求每行每列都有一个棋子,且每一格只有一个棋子.问有多少不同放法? 解:$\dfrac{36*25*16*9*4*1}{3!*3!}=144 ...

  9. 【转】NFS服务配置与mount nfs时-o nolock的问题

    NFS文件系统挂载步骤 1.创建共享目录 #mkdir /home/hellolinux/nfs 2.创建或修改/etc/exports文件 #vi /etc/exports home/helloli ...

  10. 【LOJ#6283】数列分块7

    题目大意:维护一个 N 个数组成的序列,支持区间加.区间乘.单点询问. 题解:在每一个块中维护两个标记,即:整块加和的标记和整块乘积的标记.不过由于有两个标记,涉及到计算区间总和的顺序问题. 一个指定 ...