Java thrift example 2016-12-09 02:00
Thrift
is one of the most popular remote procedure call (RPC) frameworks. You can use it to build cross-platform system. In this page I will show you how to use it in Java.
The structure of project
├─main
│ ├─java
│ │ └─com
│ │ └─henryxi
│ │ └─thrift
│ │ └─manual
│ │ AdditionClient.java
│ │ AdditionService.java
│ │ AdditionServiceHandler.java
│ │ MyServer.java
│ │
│ └─resources
│ add.thrift
│
└─test
└─java
0. Install thrift
You can click here to get the thrift for your environment. I have downloaded "thrift-0.9.3.exe" for my environment (Windows).
The dependency of project is like following.
<dependencies>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.3</version>
</dependency>
</dependencies>
1. Create .thrift
file
.thrift
file is used to generate the class which is useful for connect client and server. The code of add.thrift
is like following.
namespace java com.henryxi.thrift.addserver
typedef i32 int
service AdditionService {
int add(1:int n1, 2:int n2)
}
2. Generate class by .thrift
file
Run D:\thrift\thrift-0.9.3.exe --gen java add.thrift
(I install thrift in my D driver) it will generate AdditionService
class. You need move this class into your package and resolve the problem of dependencies manually.
3. Server and Client class
Code of server class is like following.
public class MyServer {
public static void StartsimpleServer(AdditionService.Processor<AdditionServiceHandler> processor) {
try {
TServerTransport serverTransport = new TServerSocket(9090);
TServer server = new TSimpleServer(
new TServer.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<>(new AdditionServiceHandler()));
}
}
Client
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("add result:" + client.add(100, 200));
transport.close();
} catch (TException x) {
x.printStackTrace();
}
}
}
Handler
public class AdditionServiceHandler implements AdditionService.Iface {
public int add(int n1, int n2) throws TException {
return n1 + n2;
}
}
4. Run server and client to test
Run MyServer
class and AdditionClient
class you will get the output like following.
add result:300