zoukankan      html  css  js  c++  java
  • 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 定义数据传输方式。

  • 相关阅读:
    Django模板语言之组合搜索
    爬虫
    模版语言 实现瀑布流页面
    JQuery实现瀑布流页面
    HTML中 .clearfix:after的使用
    Java8新特性——StreamAPI(一)
    Java for循环和foreach循环的性能比较
    使用java8的lambda将list转为map(转)
    取得当天的零点
    【mysql】Date和String的互相转换(DATE_FORMAT & STR_TO_DATE)
  • 原文地址:https://www.cnblogs.com/hapjin/p/4618862.html
Copyright © 2011-2022 走看看