thrift系列 - 快速入门

1.简介
           Thrift是当前流行的RPC框架之一,它有强大的代码生成引擎,可以跨语言,轻松解决程序间的通信问题。

本文旨在帮助大家快速入门,若想深入原理,请参见thrift官网:http://thrift.apache.org/。(大家都很忙,少说废话)

2.下载windows版的IDL compiler

     访问地址:http://www.apache.org/dyn/closer.cgi?path=/thrift/0.9.3/thrift-0.9.3.exe,在打开的页面中,任选一个资源下载。
      下载完成后,假设我把thrift-0.9.3.exe文件移到"F:\test\thrift\bin"(你想移到哪儿你随意) 这个文件夹下。

3.定义接口文件

      新建一个名为test.thrift的文件。以下是该文件里的内容:
      

[plain]  view plain  copy
 
  1. namespace java test.thrift_test  
  2.   
  3. service TestService {  
  4.   string getStruct(1: i32 num,2: string name)  
  5. }  

          这就是一个很简单的接口文件。thrift的引擎(此处你可以理解为thrift-0.9.3.exe),就要利用test.thrift生成你指定的语言的代码。这个接口有两个参数,一个是32位的整数,一个是一个字符串,返回值的类型也是一个字符串。关于接口文件定义的方式,请参见下一篇文章《thrift类型定义》。

4.利用接口文件生成代码

     打开windows的命令行(这个你不要问我)。切换到"F:\test\thrift\bin"(第2步的时候说过)
     使用命令:thrift-0.9.3.exe -r --gen java test.thrift
     打开"F:\test\thrift\bin"这个目录,你会发现有一个名为"gen-java"的文件夹,该文件夹下就是生成的java代码。

5.搭建maven环境

     利用你的Java IDE构建一个maven工程。这里是pom.xml中需要添加的内容:

[html]  view plain  copy
 
  1. <dependency>  
  2.     <groupId>org.apache.thrift</groupId>  
  3.     <artifactId>libthrift</artifactId>  
  4.     <version>0.9.3</version>  
  5. </dependency>  

       这里面有thrift运行时所需要的所有依赖jar。

    注意,请把gen-java文件夹下的代码粘贴到工程中去!

6.java版demo

     首先把首先实现TestService接口:

[java]  view plain  copy
 
  1. package test.thrift_test;  
  2.   
  3. import org.apache.thrift.TException;  
  4.   
  5. import test.thrift_test.TestService.Iface;  
  6.   
  7. //我们定义的test.thrift的接口的具体实现  
  8. class TestServiceHandler implements Iface{  
  9.   
  10.     public String getStruct(int num, String name) throws TException {  
  11.         return name + num;  
  12.     }  
  13.       
  14. }  

        Thrift是CS的通信方式,即有一个server端,和一个client端。

     以下是Server端的示例代码:

[java]  view plain  copy
 
  1. package test.thrift_test;  
  2.   
  3. import org.apache.thrift.server.TServer;  
  4. import org.apache.thrift.server.TServer.Args;  
  5. import org.apache.thrift.server.TSimpleServer;  
  6. import org.apache.thrift.transport.TServerSocket;  
  7. import org.apache.thrift.transport.TServerTransport;  
  8. import org.apache.thrift.transport.TTransportException;  
  9.   
  10. public class Server   
  11. {  
  12.     public static void main( String[] args ){  
  13.         try {  
  14.             TestService.Processor processor = new TestService.Processor(new TestServiceHandler());  
  15.               
  16.         TServerTransport serverTransport = new TServerSocket(9090);  
  17.         TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));  
  18.         server.serve();  
  19.               
  20.     } catch (TTransportException e) {  
  21.         e.printStackTrace();  
  22.     }  
  23.     }  
  24. }  

      

        以下是Client端的示例代码:

[java]  view plain  copy
 
  1. package test.thrift_test;  
  2.   
  3. import org.apache.thrift.TException;  
  4. import org.apache.thrift.protocol.TBinaryProtocol;  
  5. import org.apache.thrift.protocol.TProtocol;  
  6. import org.apache.thrift.transport.TSocket;  
  7. import org.apache.thrift.transport.TTransport;  
  8. import org.apache.thrift.transport.TTransportException;  
  9.   
  10. public class Client {  
  11.     public static void main(String[] args) {  
  12.         TTransport transport = new TSocket("localhost", 9090);  
  13.         try {  
  14.             transport.open();  
  15.             TProtocol protocol = new TBinaryProtocol(transport);  
  16.             TestService.Client client = new TestService.Client(protocol);  
  17.   
  18.             String result = client.getStruct(123, "test");  
  19.             System.out.println(result);  
  20.             transport.close();  
  21.         } catch (TTransportException e) {  
  22.             e.printStackTrace();  
  23.         } catch (TException e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.     }  
  27. }  


             启动的时候,先运行 Server.java,再运行Client.java。正常情况下,控制台输出结果为:test123

        本文内容参考如下:

        【1】http://thrift.apache.org/

        注意:
        如您发现本文档中有明显错误的地方,
        或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。
        转载或使用本文档时,请作醒目说明。
        必要时请联系作者,否则将追究相应的法律责任。

        note:
        If you find this document with any error ,
        Or if you find any illegal citations , please contact me correct.
        Reprint or use of this document,Please explain for striking. 
        Please contact the author if necessary, or they will pursue the corresponding legal responsibility.

猜你喜欢

转载自www.cnblogs.com/austinspark-jessylu/p/9046199.html