Thrift通常以独立服务存在,也支持HTTP协议,以servlet方式在Tomcat中运行。
一. 服务端Servlet
实现比较简单,只需实现TExtensibleServlet,并在getProcessor()中填充实现类。
/**
* Thrift servlet
*/
@WebServlet(name="thrifttest",value="/thrifttest")
public class ThriftService extends TExtensibleServlet {
private static final long serialVersionUID = 1L;
@Override
protected TProtocolFactory getInProtocolFactory() {
TProtocolFactory factory = new TCompactProtocol.Factory();
return factory;
}
@Override
protected TProtocolFactory getOutProtocolFactory() {
TProtocolFactory factory = new TCompactProtocol.Factory();
return factory;
}
@Override
protected TProcessor getProcessor() {
// 接口实现类
ThriftServiceImpl impl = new ThriftServiceImpl();
// 返回处理器
TProcessor tProcesser = new SimpleThriftService.Processor<SimpleThriftService.Iface>(impl);
return tProcesser;
}
}
二. 客户端
/**
* Http thrift client
*/
public static void httpClient() {
String url = "http://host:8080/servlet3/thrifttest";
try {
TTransport transport = new THttpClient(url);
TProtocol protocol = new TCompactProtocol(transport); // HTTP通信协议
SimpleThriftService.Client client = new SimpleThriftService.Client(protocol);
transport.open();
int val = client.getInt(10); // 调用方法
System.out.println( "Val: " + val );
transport.close();
} catch (TException e) {
e.printStackTrace();
}
}
三. 协议分析