您的位置:首页 > 其它

Thrift交流(一)简单的Thrift

2017-07-05 15:34 113 查看
Thrift是一个可伸缩的跨语言的服务开发框架,是facebook开发的一个跨语言通信平台。为各种语言提供快捷的rpc服务。现阶段已经支持C++,

Java,
Python,
PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml等语言。在近来的工作中,重新学习Thrift通信的内容,和大家做个简单的交流。

Thrift示意图



1)安装Thrift环境

Thrift的环境的安装并不复杂,我们现在以最简单的windows环境做个案例。

首先在官方网站下载最新的thrift exe文件,http://thrift.apache.org/download/

然后把exe文件改名为thrift.exe,放在了windows的目录下,如图所示:



接着配置thrift环境变量:



测试Thrift运行环境:



2)编写Thrift文件

thrift文件如下

[java]
view plain
copy

namespace java thrift  // defines the namespace    
     
typedef i32 int  //typedefs to get convenient names for your types  
  
service ThriftService {    
    int add(1:int a,2:int b),  
}  

通过命令行执行Thrift文件,并生成



3)建立Thrift工程

首先建立maven工程,把如下内容加到pom.xml

[html]
view plain
copy

<dependency>  
            <groupId>org.apache.thrift</groupId>  
            <artifactId>libthrift</artifactId>  
            <version>0.9.0</version>  
        </dependency>  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-api</artifactId>  
            <version>1.7.5</version>  
        </dependency>  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-simple</artifactId>  
            <version>1.7.5</version>  
        </dependency>  
  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-log4j12</artifactId>  
            <version>1.7.5</version>  
        </dependency>  
        <dependency>  
            <groupId>log4j</groupId>  
            <artifactId>log4j</artifactId>  
            <version>1.2.17</version>  
        </dependency>  

[html]
view plain
copy

  

编写ThriftService的实现类:



代码如下:

[java]
view plain
copy

package thrift;  
  
import org.apache.thrift.TException;  
  
public class ThriftServiceImpl implements Iface {  
  
    @Override  
    public int add(int a, int b) throws TException {  
        return a + b;  
    }  
  
}  

4)编写服务器及测试

[java]
view plain
copy

package com.duowan.yy.thriftTest;  
  
import org.apache.thrift.TProcessor;  
import org.apache.thrift.protocol.TBinaryProtocol;  
import org.apache.thrift.protocol.TBinaryProtocol.Factory;  
import org.apache.thrift.server.TServer;  
import org.apache.thrift.server.TSimpleServer;  
import org.apache.thrift.transport.TServerSocket;  
import org.apache.thrift.transport.TTransportException;  
  
import thrift.ThriftService;  
import thrift.ThriftServiceImpl;  
  
public class ThriftServer {  
    public static void main(String[] args) {  
        try {  
            TServerSocket serverTransport = new TServerSocket(7911);  
  
            Factory proFactory = new TBinaryProtocol.Factory();  
  
            TProcessor processor = new ThriftService.Processor<ThriftService.Iface>(  
                    new ThriftServiceImpl());  
            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();  
        } catch (TTransportException e) {  
            e.printStackTrace();  
        }  
    }  
}  

测试启动:



编写测试类:

[java]
view plain
copy

package com.duowan.yy.thriftTest;  
  
import org.apache.thrift.TException;  
import org.apache.thrift.protocol.TBinaryProtocol;  
import org.apache.thrift.protocol.TProtocol;  
import org.apache.thrift.transport.TSocket;  
import org.apache.thrift.transport.TTransport;  
import org.apache.thrift.transport.TTransportException;  
  
import thrift.ThriftService;  
  
  
public class Test {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        try {  
            TTransport transport = new TSocket("localhost", 7911);  
            transport.open();  
            TProtocol protocol = new TBinaryProtocol(transport);  
            ThriftService.Client client = new ThriftService.Client(protocol);  
            System.out.println(client.add(77, 5));  
            transport.close();  
  
        } catch (TTransportException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (TException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
  
}  

  效果如下:



简单的Thrift之旅已经完成了,希望大家玩的开心。

Thrift交流(二)thrift服务端和客户端实现
Nifty http://blog.csdn.net/arjick/article/details/18364513
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: