使用Java快速入门Thrift

Apache Thrift是一个facebook建立的RPC框架,现在是一个Apache的顶级项目。Thrift允许通过一个跨语言的定义文件的方式定义数据类型和服务接口,这个文件作为RPC客户端和服务器通信的标准,你也可以去看看Thrift的白皮书了解更多信息。

根据Apache Thrift的官方站点的描述,Thrift是一个:

software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.
 
安装Thrift比较的烦,但是在Windows下官方编译了一个thrift.exe,下载安装就行了。 

写 Thrift定义文件(.thrift file)

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

示例定义文件(add.thrift)

namespace java com.eviac.blog.samples.thrift.server  // defines the namespace   
   
typedef i32 int //typedefs to get convenient names for your types  
   
service AdditionService {  // defines the service to add two numbers  
        intadd(1:intn1, 2:intn2), //defines a method  
}

编译Thrift定义文件

下面的命令编译.thrift文件

thrift --gen <language> <Thrift filename>

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

thrift --gen java add.thrift

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

写一个 service handler

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

package com.eviac.blog.samples.thrift.server;  
import org.apache.thrift.TException;  
   
public class AdditionServiceHandler implements AdditionService.Iface {  
 @Override 
 publicint add(intn1, intn2) throws TException {  
  returnn1 + n2;  
 } 
   
}

写一个简单的服务器

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

package com.eviac.blog.samples.thrift.server;  
   
import org.apache.thrift.transport.TServerSocket;  
import org.apache.thrift.transport.TServerTransport;  
import org.apache.thrift.server.TServer;  
import org.apache.thrift.server.TServer.Args;  
import org.apache.thrift.server.TSimpleServer;  
   
public class MyServer {  
   
 public static void StartsimpleServer(AdditionService.Processor<AdditionServiceHandler> processor) { 
  try{  
   TServerTransport serverTransport = new TServerSocket(9090); 
   TServer server = new TSimpleServer(  
     newArgs(serverTransport).processor(processor));  
   
   // Use this for a multithreaded server  
   // TServer server = new TThreadPoolServer(new  
   // TThreadPoolServer.Args(serverTransport).processor(processor));  
   
   System.out.println("Starting the simple server..."); 
   server.serve(); 
  }catch(Exception e) {  
   e.printStackTrace(); 
  } 
 } 
    
 public static void main(String[] args) {  
  StartsimpleServer(new AdditionService.Processor<AdditionServiceHandler>(new AdditionServiceHandler()));  
 } 
   
}

写一个客户端

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

package com.eviac.blog.samples.thrift.client;  
   
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;  
   
public class AdditionClient {  
   
 public static void main(String[] args) {  
   
  try{  
   TTransport transport;  
   
   transport = new TSocket("localhost",9090); 
   transport.open(); 
   
   TProtocol protocol = new TBinaryProtocol(transport);  
   AdditionService.Client client = new AdditionService.Client(protocol);  
   
   System.out.println(client.add(100,200)); 
   
   transport.close(); 
  }catch(TTransportException e) {  
   e.printStackTrace(); 
  }catch(TException x) {  
   x.printStackTrace(); 
  } 
 } 
   
}

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

Starting the simple server...

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

300

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Thrift 是一种高效且跨语言的远程服务调用框架,它可以让你使用不同的编程语言实现客户端和服务器端,并且在它们之间进行通信。下面是使用 Java 快速入门 Apache Thrift 的步骤: 1. 安装 Thrift 首先,你需要从 Apache Thrift 的官方网站(https://thrift.apache.org/)下载并安装 Thrift。 2. 定义接口文件 在 Thrift 中,你需要定义一个接口文件,它描述了你的服务接口和数据类型。下面是一个简单的示例: ``` namespace java com.example service MyService { string sayHello(1: string name) } ``` 上面的代码定义了一个名为 MyService 的服务,它有一个名为 sayHello 的方法,它接受一个名为 name 的字符串参数,并返回一个字符串。 3. 生成代码 使用 Thrift 编译器(thrift)来生成 Java 代码: ``` thrift --gen java MyService.thrift ``` 这将生成一个名为 MyService.javaJava 接口文件,以及一些用于序列化和反序列化的辅助类。 4. 实现服务 你需要编写一个实现 MyService 接口的 Java 类,例如: ``` public class MyServiceImpl implements MyService.Iface { public String sayHello(String name) throws TException { return "Hello, " + name + "!"; } } ``` 上面的代码实现了 sayHello 方法,并返回一个带有名称的问候语。 5. 启动服务器 你需要编写一个 Java 服务器,以便可以在其中运行 MyServiceImpl。以下是一个简单的示例: ``` public class MyServer { public static void main(String[] args) throws Exception { TServerTransport serverTransport = new TServerSocket(9090); TServer server = new TSimpleServer(new Args(serverTransport).processor(new MyService.Processor(new MyServiceImpl()))); System.out.println("Starting the server..."); server.serve(); } } ``` 上面的代码创建了一个 TSimpleServer 实例,并将其绑定到本地的 9090 端口。它还将 MyServiceImpl 的实例添加到 MyService.Processor 中,以便服务器可以调用 MyServiceImpl 中实现的方法。 6. 编写客户端 你需要编写一个 Java 客户端,以便可以调用 MyServiceImpl 中实现的方法。以下是一个简单的示例: ``` public class MyClient { public static void main(String[] args) throws Exception { TTransport transport = new TSocket("localhost", 9090); transport.open(); TProtocol protocol = new TBinaryProtocol(transport); MyService.Client client = new MyService.Client(protocol); String result = client.sayHello("World"); System.out.println(result); transport.close(); } } ``` 上面的代码创建了一个 TSocket 实例,并将其连接到本地的 9090 端口。它还创建了一个 MyService.Client 实例,并使用它来调用 MyServiceImpl 中实现的 sayHello 方法。 以上就是使用 Java 快速入门 Apache Thrift 的步骤。你可以通过阅读 Thrift 的官方文档来了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值