Thrift使用

来源:互联网 发布:nginx配置ip端口访问 编辑:程序博客网 时间:2024/05/17 10:40

转载自:http://blog.csdn.net/u010887744/article/details/50984884


Thrift是什么,有什么优势?这里就不阐述了,百度即可。本文旨在于展现Thrift服务搭建和调用的过程,让初学者少走弯路。本文提供完整代码及所需jar和thrift-0.9.3.exe。点击此处下载完整工程:https://github.com/zxiaofan/OpenSource_Study/tree/master/Thrift

先来张目录结构图

1、下载所需jar和thrift-0.9.3.exe    

               xxxx.thrift以及thrift文件说明在压缩包中有说明文档和示例

2、解压thrift-0.9.3.exe到本地目录(如:E:\Thrift ),建议全英文目录,并修改名字为thrift.exe(方便敲命令)。


3、CMD定位到E:\Thrift ,执行命令

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. cd /d E:\Thrift  

      即可。

 

4、生成Java文件

      接着在命令行输入:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. thrift.exe -r -gen java ./ThriftTest.thrift  

,此时会在thrift.exe目录生成gen-java文件夹,里面的就是我们所需的ThriftHelloWorld.java文件了。

 

5、接下来就是编写服务端了。

      ①首先实现我们的接口,注意要实现Iface接口哦。

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package service;  
  2.   
  3. import thrift.ThriftHelloWorld.Iface;  
  4. /** 
  5.  * 服务端实现类 
  6.  * 
  7.  */  
  8. public classHelloServiceImpl implements Iface {  
  9.     public String sayHello(String username) {  
  10.         return "hello " + username;  
  11.     }  
  12.    
  13.     public String getRandom() {  
  14.         return "random";  
  15.     }  
  16. }  

      ②在src目录下新建thrift包,将先前生成的ThriftHelloWorld.java拷贝进去;

      ③新建startServer用于启动服务,

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package service;  
  2.    
  3. import org.apache.thrift.protocol.TBinaryProtocol.Factory;  
  4. import org.apache.thrift.server.TServer;  
  5. import org.apache.thrift.server.TThreadPoolServer;  
  6. import org.apache.thrift.server.TThreadPoolServer.Args;  
  7. import org.apache.thrift.transport.TServerSocket;  
  8. import org.apache.thrift.transport.TTransportException;  
  9.    
  10. import thrift.ThriftHelloWorld;  
  11. import thrift.ThriftHelloWorld.Processor;  
  12.    
  13. /** 
  14.  * 启动服务 
  15.  * 
  16.  */  
  17. public classStartServer {  
  18.     /** 
  19.      * 启动Thrift服务器 
  20.      */  
  21.     public void startServer() {  
  22.    
  23.         try {  
  24.             // 定义传输的socket,设置服务端口为6789  
  25.             TServerSocket serverTransport = newTServerSocket(6789);  
  26.    
  27.             // 设置协议工厂为 TBinaryProtocol.Factory  
  28.             Factory proFactory = newFactory(truetrue);  
  29.    
  30.             // 关联处理器与 Hello服务的实现  
  31.             ThriftHelloWorld.Processor processor = new Processor(new HelloServiceImpl());  
  32.    
  33.             // 定义服务端的参数值  
  34.             Args args = new Args(serverTransport);  
  35.             args.processor(processor);  
  36.             args.protocolFactory(proFactory);  
  37.             TServer server = newTThreadPoolServer(args);  
  38.    
  39.             // 服务端开启服务s  
  40.             server.serve();  
  41.         } catch (TTransportException e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.     }  
  45.    
  46.     public static void main(String[] args) {  
  47.         System.out.println("ServerStart!");  
  48.         StartServer server = new StartServer();  
  49.         server.startServer();  
  50.     }  
  51. }  

服务端就此完成,启动main函数,控制台输出Server Start!。

发布的时候只需将此工程导出为可执行jar或将工程稍作修改用tomcat发布。


6、编写客户端,完成服务调用

      ①同样在src目录下新建thrift包,将先前生成的ThriftHelloWorld.java拷贝进去;

      ②创建ClientTest类用于调用服务

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package client;  
  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. import org.junit.Test;  
  10.    
  11. import thrift.ThriftHelloWorld;  
  12.    
  13. /** 
  14.  * 客户端实现 
  15.  * 
  16.  */  
  17. public classClientTest {  
  18.     /** 
  19.      * 调用Hello服务 
  20.      */  
  21.     @Test  
  22.     public void startClient() {  
  23.         try {  
  24.    
  25.             // 设置调用的服务地址为本地,端口为6789  
  26.             TTransport transport = newTSocket("localhost"6789);  
  27.             transport.open();  
  28.             // 数据传输协议有:二进制协议、压缩协议、JSON格式协议  
  29.             // 这里使用的是二进制协议  
  30.             // 协议要和服务端一致  
  31.             TProtocol protocol = new TBinaryProtocol(transport);  
  32.             ThriftHelloWorld.Client client =new ThriftHelloWorld.Client(protocol);  
  33.             // 调用服务器端的服务方法  
  34.            System.out.println(client.sayHello("zxiaofan"));  
  35.             // 关闭  
  36.             transport.close();  
  37.         } catch (TTransportException e) {  
  38.             e.printStackTrace();  
  39.         } catch (TException e) {  
  40.             e.printStackTrace();  
  41.         }  
  42.     }  
  43. }  

启动startClient,控制台输出hello zxiaofan,至此客户端完成。


Thrift所需要的jar包和工具

 

0 0
原创粉丝点击