[轉]thrift系列 - 快速入門

原文: http://blog.csdn.net/hrn1216/article/details/51274934html

thrift 介紹,入門例子。 thrift 是一個RPC框架,實現跨語言java

---------------------------------------------------------------------------------------------------------------------------apache

1.簡介
           Thrift是當前流行的RPC框架之一,它有強大的代碼生成引擎,能夠跨語言,輕鬆解決程序間的通訊問題。windows

本文旨在幫助你們快速入門,若想深刻原理,請參見thrift官網:http://thrift.apache.org/。(你們都很忙,少說廢話)框架

 

2.下載windows版的IDL compilermaven

     訪問地址: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"(你想移到哪兒你隨意) 這個文件夾下。this

 

3.定義接口文件spa

      新建一個名爲test.thrift的文件。如下是該文件裏的內容:
      .net

[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.

相關文章
相關標籤/搜索