使用Java快速入门的Apache Thrift

Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目。 Thrift可让您在不依赖语言的定义文件中定义数据类型和服务接口。 该定义文件用作编译器的输入,以生成用于构建通过不同编程语言进行通信的RPC客户端和服务器的代码。 您也可以参考Thrift白皮书

根据官方网站 Apache Thrift的说法,该软件框架用于可扩展的跨语言服务开发,它结合了软件堆栈和代码生成引擎,以构建可在C ++,Java,Python,PHP,Ruby, Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js,Smalltalk,OCaml和Delphi等语言。 图片由维基百科提供

在Windows中安装Apache Thrift

安装节俭可能是一个令人厌烦的过程。 但是对于Windows,编译器可以作为预构建的exe使用。 下载thrift.exe并将其添加到您的环境变量中。

编写Thrift定义文件(.thrift文件)

一旦习惯了,编写Thrift定义文件就变得非常容易。 我发现本教程非常有用。

定义文件示例(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
        int add(1:int n1, 2:int n2), //defines a method
}

编译Thrift定义文件

要编译.thrift文件,请使用以下命令。

thrift --gen <language> <Thrift filename>

在我的示例中,命令是

thrift --gen java add.thrift

执行完该命令后,您将在gen-java目录中找到对构建RPC客户端和服务器有用的源代码。 在我的示例中,它将创建一个名为AdditionService.java的Java代码。

编写服务处理程序

服务处理程序类是实现AdditionService.Iface接口所必需的。

示例服务处理程序(AdditionServiceHandler.java)

package com.eviac.blog.samples.thrift.server;

import org.apache.thrift.TException;

public class AdditionServiceHandler implements AdditionService.Iface {

 @Override
 public int add(int n1, int n2) throws TException {
  return n1 + n2;
 }

}

编写一个简单的服务器

以下是启动简单的节俭服务器的示例代码。 要启用多线程服务器,请取消注释示例代码的注释部分。

示例服务器(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(
     new Args(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()));
 }

}

写客户

以下是使用AdditionService提供的服务的示例Java客户端代码。

客户端代码示例(AdditionClient.java)

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

参考: EVIAC博客上的JCG合作伙伴 Pavithra Siriwardena的Apache Thrift with Java快速入门


翻译自: https://www.javacodegeeks.com/2012/07/apache-thrift-with-java-quickstart.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值