Thrift

異なる言語を連携するために開発されたRPCフレームワークである

http://thrift.apache.org/

IDL (Interface Description Language)

http://thrift.apache.org/docs/idl/

スタブとスケルトン(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>