问题导读:
1.如何编写一个book.thrift文件?
2.如何通过编译工具生成一个Java文件?
3.服务端与客户端你认为该如何实现?
Thrift 之前属于facebook,2007年提交给Apache。目前版本为0.9.1,采用Ant管理。在成功的构建之后会有libthrift-0.9.1.jar 。是其java实现。Thrift的诱人之处在于跨平台,类http的rmp协议在性能上有明显的优势。
除了libthrift-0.9.1.jar 外,在Windows下开发还需要thrift-0.9.1.exe编译工具。
现在完成一个简单的Java标准项目,其中包含其服务端和客户端。
1.编写一个book.thrift文件,这是一个使用接口定义语言 (interface definition language,IDL) 来定义数据类型和服务的文件。
- namespace java com.oran.thrift.dao
-
- service BookService{
- string buyBook(1:string bookName)
- }
复制代码
2.使用编译工具生成java文件,命令为:
- thrift-0.9.1.exe -r -gen java book.thrift
复制代码
生成的Java文件缩略图为:
将这个接口文件拷贝到对应的package下面。
3.实现接口BookService.Iface:
- public class BookServiceImpl implements com.oran.thrift.dao.BookService.Iface {
-
- @Override
- public String buyBook(String bookName) throws TException {
- System.out.println("bookName = " + bookName);
- return bookName+" 我买了...";
- }
-
- }
复制代码
现在开始应用这个实现.
4.服务端实现:
- package com.oran.test.main;
-
- import org.apache.thrift.TProcessor;
- import org.apache.thrift.protocol.TBinaryProtocol;
- import org.apache.thrift.server.TServer;
- import org.apache.thrift.server.TSimpleServer;
- import org.apache.thrift.transport.TServerSocket;
- import org.apache.thrift.transport.TTransportException;
-
- import com.oran.thrift.dao.BookService;
- import com.oran.thrift.dao.impl.BookServiceImpl;
-
- public class RunServer {
- private static final int SERVER_PORT = 8090;
-
- public static void main(String[] args) throws TTransportException {
-
- System.out.println("BookService is running...");
- TProcessor processor = new BookService.Processor<BookService.Iface>(new BookServiceImpl());
- TServerSocket serverSocket = new TServerSocket(SERVER_PORT);
- TServer.Args tArgs = new TServer.Args(serverSocket);
- tArgs.processor(processor);
- tArgs.protocolFactory(new TBinaryProtocol.Factory());
-
- TServer tServer = new TSimpleServer(tArgs);
- tServer.serve();
- }
- }
复制代码
5.客户端实现:
- package com.oran.test.main;
-
- import org.apache.thrift.protocol.TBinaryProtocol;
- import org.apache.thrift.protocol.TProtocol;
- import org.apache.thrift.transport.TSocket;
- import org.apache.thrift.transport.TTransport;
-
- import com.oran.thrift.dao.BookService;
-
- public class RunClient {
- public static final String SERVER_IP = "localhost" ;
- public static final int SERVER_PORT = 8090 ;
- public static final int TIMEOUT = 30000 ;
-
- public static void main(String[] args) {
- TTransport transport = null;
- try{
- transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
- TProtocol protocol = new TBinaryProtocol(transport);
- BookService.Client client = new BookService.Client(protocol);
- transport.open();
- String result = client.buyBook("老人与海");
- System.out.println("THRIFT RETURN = "+result);
- }catch(Exception e){
-
- }
- }
- }
复制代码
OK,代码部分完毕。
- <!-- 服务端结果 -->
- BookService is running...
-
- <!-- 客户端结果 -->
- THRIFT RETURN = 老人与海 我买了...
复制代码
|