Apache Thrift 初学小讲(三)【http】

在上一节Apache Thrift 初学小讲(二)【一个简单示例】中client端提到http类型的transport,但是并没有给出相应的服务端实现。

本节主要写一个transport为http的例子,以java为例,server端thrift提供了一个类TExtensibleServlet,只需要写一个servlet继承这个类,并实现以下抽象方法即可:

 

protected TProtocolFactory getInProtocolFactory();//in通信协议

protected TProtocolFactory getOutProtocolFactory();//out通信协议

protected TProcessor getProcessor();//具体的业务处理逻辑类

 

然后选择一个servlet容器比如tomcat发布这个servlet,最后client端的transport使用THttpClient即可。

 

服务端TestServlet.java:

import javax.servlet.annotation.WebServlet;

import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocolFactory;
import org.apache.thrift.server.TExtensibleServlet;

import thrift.test.ThriftTest;

@WebServlet("/TestServlet") 
public class TestServlet extends TExtensibleServlet {

	@Override
	protected TProtocolFactory getInProtocolFactory() {
		TProtocolFactory tProtocolFactory = new TCompactProtocol.Factory();
		return tProtocolFactory;
	}

	@Override
	protected TProtocolFactory getOutProtocolFactory() {
		TProtocolFactory tProtocolFactory = new TCompactProtocol.Factory();
		return tProtocolFactory;
	}

	@Override
	protected TProcessor getProcessor() {
		//具体的业务逻辑类,实现ThriftTest.thrift里的getUser接口
        TestHandler testHandler = new TestHandler(); 
        //ThriftTest.Processor是生成的服务端代码
        ThriftTest.Processor testProcessor = new ThriftTest.Processor(testHandler); 
		return testProcessor;
	}

}

 

客户端TestClient.java:

import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.THttpClient;
import org.apache.thrift.transport.TTransport;

import thrift.test.ThriftTest;
import thrift.test.User;

public class TestClient {
    public static void main(String [] args) throws Exception {
	    String host = "localhost";
	    int port = 8080;

    	String url = "http://" + host + ":" + port + "/test/TestServlet";
    	TTransport transport = new THttpClient(url); //通信方式为http       
	    TProtocol tProtocol = new TCompactProtocol(transport); //通信协议	
	    //ThriftTest.Client是生成的客户端代码
	    ThriftTest.Client testClient = new ThriftTest.Client(tProtocol); 

        System.out.println("connect " + host + ":" + port);	
	    transport.open();
        User user = testClient.getUser(2); //getUser就是ThriftTest.thrift所定义的接口
        System.out.println("名字:"+ user.getName());

        transport.close();
    }
}

 

启动tomcat,运行TestClient,结果:

connect localhost:8080

名字:另外一个烟火

 

工程文件结构:


 

附件ThriftServlet.rar是整个eclipse工程文件。

猜你喜欢

转载自zhuwx.iteye.com/blog/2347581