Thrift 安装及运用

序言:由于近来在看storm Topology提交过程的源代码,写好的topology
jar文件是因而Thrift 大切诺基PC的款式提交给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 定义数据传输形式。

 

相关文章