thrift简介

安装Thrift比较的烦,但是在Windows下官方编译了一个thrift.exe,下载安装就行了。 

写 Thrift定义文件(.thrift file)

如果你之前有接触过这个东西的话,写定义文件非常的简单。但这里可以参考官方的教程快速开始。

示例定义文件(add.thrift)

1 namespace java com.eviac.blog.samples.thrift.server  // defines the namespace  
2    
3 typedef i32 int  //typedefs to get convenient names for your types 
4    
5 service AdditionService {  // defines the service to add two numbers 
6         int add(1:int n1, 2:int n2), //defines a method 
7 }

编译Thrift定义文件

下面的命令编译.thrift文件

1 thrift --gen <language> <Thrift filename>

对于我的例子来讲,命令是:

1 thrift --gen java add.thrift

在执行完代码后,在gen-java目录下你会发现构建RPC服务器和客户端有用的源代码。在我的例子中我将创建一个叫做AddtionService.java的java文件。

写一个 service handler

Service handler 类必须实现 AdditionService.Iface接口。
示例Service handler(AdditionServiceHandler.java)

01 package com.eviac.blog.samples.thrift.server; 
02    
03 import org.apache.thrift.TException; 
04    
05 public class AdditionServiceHandler implements AdditionService.Iface { 
06    
07  @Override 
08  public int add(int n1, int n2) throws TException { 
09   return n1 + n2; 
10  
11    
12 }

写一个简单的服务器

下面的示例代码是一个简单的Thrift服务器。可以看到下面的代码中有一段是注释了的,可以去掉注释来启用多线程服务器。
示例服务器(MyServer.java)

01 package com.eviac.blog.samples.thrift.server; 
02    
03 import org.apache.thrift.transport.TServerSocket; 
04 import org.apache.thrift.transport.TServerTransport; 
05 import org.apache.thrift.server.TServer; 
06 import org.apache.thrift.server.TServer.Args; 
07 import org.apache.thrift.server.TSimpleServer; 
08    
09 public class MyServer { 
10    
11  public static void StartsimpleServer(AdditionService.Processor<AdditionServiceHandler> processor) { 
12   try 
13    TServerTransport serverTransport = new TServerSocket(9090); 
14    TServer server = new TSimpleServer( 
15      new Args(serverTransport).processor(processor)); 
16    
17    // Use this for a multithreaded server 
18    // TServer server = new TThreadPoolServer(new 
19    // TThreadPoolServer.Args(serverTransport).processor(processor)); 
20    
21    System.out.println("Starting the simple server..."); 
22    server.serve(); 
23   catch (Exception e) { 
24    e.printStackTrace(); 
25   
26  
27     
28  public static void main(String[] args) { 
29   StartsimpleServer(new AdditionService.Processor<AdditionServiceHandler>(newAdditionServiceHandler())); 
30  
31    
32 }

写一个客户端

下面的例子是一个使用Java写的客户端短使用AdditionService的服务。

 

01 package com.eviac.blog.samples.thrift.client; 
02    
03 import org.apache.thrift.TException; 
04 import org.apache.thrift.protocol.TBinaryProtocol; 
05 import org.apache.thrift.protocol.TProtocol; 
06 import org.apache.thrift.transport.TSocket; 
07 import org.apache.thrift.transport.TTransport; 
08 import org.apache.thrift.transport.TTransportException; 
09    
10 public class AdditionClient { 
11    
12  public static void main(String[] args) { 
13    
14   try 
15    TTransport transport; 
16    
17    transport = new TSocket("localhost"9090); 
18    transport.open(); 
19    
20    TProtocol protocol = new TBinaryProtocol(transport); 
21    AdditionService.Client client = new AdditionService.Client(protocol); 
22    
23    System.out.println(client.add(100200)); 
24    
25    transport.close(); 
26   catch (TTransportException e) { 
27    e.printStackTrace(); 
28   catch (TException x) { 
29    x.printStackTrace(); 
30   
31  
32    
33 }

运行服务端代码(MyServer.java)将会看到下面的输出。

1 Starting the simple server...

然后运行客户端代码(AdditionClient.java),将会看到如下输出。

1 300
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值