Thrift
異なる言語を連携するために開発されたRPCフレームワークである
IDL (Interface Description Language)
スタブとスケルトン(MyService.java)が自動生成される
thrift-0.9.1.exe --gen java MyService.thrift
MyService.thrift
namespace java jp.co.sample.thrift.service
service MyService {
string getMessage()
}
サーバ側
import org.apache.thrift.TException;
public class MyServiceImpl implements MyService.Iface {
public String getMessage() throws TException {
return "This is Thrift test!";
}
}
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
MyService.Iface service = new MyServiceImpl();
MyService.Processor<MyService.Iface> processor
= new MyService.Processor<MyService.Iface>(service);
TServerSocket serverTransport = new TServerSocket(9090);
TSimpleServer server
= new TSimpleServer(new TServer.Args(serverTransport).processor(processor));
server.serve();
クライアント側
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;
TTransport transport = new TSocket("localhost", 9090);
TProtocol protocol = new TBinaryProtocol(transport);
MyService.Iface service = new MyService.Client(protocol);
transport.open();
String result = service.getMessage();
...
transport.close();
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.8</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>0.9.16</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>0.9.16</version>
</dependency>