根据官方网站 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