| 
 | 
	
 
 
首先上官网下载代码 
 
https://thrift.apache.org/download 
 
下载源码thrift-0.9.3.tar.gz  
 
解压之后放在路径C:\thrift-0.9.3\thrift-0.9.3 
 
并下载windows执行版thrift-0.9.3.exe 
 
放在路径C:\thrift-0.9.3下 
 
 
下载apache ant项目,用于打jar包 
 
下载路径 
 
http://ant.apache.org/bindownload.cgi 
 
解压之后放在路径C:\apache-ant-1.9.7-bin\apache-ant-1.9.7 
 
配置环境变量 
 
ANT_HOME  : C:\apache-ant-1.9.7-bin\apache-ant-1.9.7 
 
把C:\apache-ant-1.9.7-bin\apache-ant-1.9.7\bin\ant.bat复制到路径C:\thrift-0.9.3\thrift-0.9.3\lib\java下 
 
在cmd中运行ant.bat,会生成jar包libthrift-0.9.3 在路径C:\thrift-0.9.3\thrift-0.9.3\lib\java\build 
 
 
在路径C:\thrift-0.9.3中创建一个文本文件 
 
复制代码 
 
namespace java com.winwill.thrift 
enum RequestType { 
    SAY_HELLO,   //问好 
    QUERY_TIME,  //询问时间}struct Request {     
    1: required RequestType type;  // 请求的类型,必选 
    2: required string name;       // 发起请求的人的名字,必选 
    3: optional i32 age;           // 发起请求的人的年龄,可选 
    } 
 
exception RequestException {     
1: required i32 code;     
2: optional string reason; 
} 
// 服务名 
service HelloWordService {     
string doAction(1: Request request) throws (1:RequestException qe);  
// 可能抛出异常。 
} 
 
保存为Test.thrift 
 
 
在cmd中进入路径C:\thrift-0.9.3 
 
执行命令thrift-0.9.3 -gen java Test.thrift 
 
会在路径C:\thrift-0.9.3下生成一个文件夹gen-java 
 
 
在Eclipse中创建工程TestThrift 
 
按照简书教程生成package 
 
com.winwill.thrift 
 
把上面生成的gen-java中的代码复制到package中 
 
并在package中创建代码,由于可能跟简书教程使用的版本不同,简书教程中的某些写法无法编译, 
 
经过修改后使用如下代码 
 
1.服务端 
 
package com.winwill.thrift; 
 
 
import org.apache.commons.lang3.StringUtils; 
import org.apache.thrift.TException; 
 
import java.util.Date; 
 
public class HelloWordServiceImpl implements com.winwill.thrift.HelloWordService.Iface { 
    // 实现这个方法完成具体的逻辑。 
    public String doAction(com.winwill.thrift.Request request) throws com.winwill.thrift.RequestException, TException { 
        System.out.println("Get request: " + request); 
        if (StringUtils.isBlank(request.getName()) || request.getType() == null) { 
            throw new com.winwill.thrift.RequestException(); 
        } 
        String result = "Hello, " + request.getName(); 
        if (request.getType() == com.winwill.thrift.RequestType.SAY_HELLO) { 
            result += ", Welcome!"; 
        } else { 
            result += ", Now is " + new Date().toLocaleString(); 
        } 
        return result; 
    } 
} 
 
2.启动服务 
 
package com.winwill.thrift; 
 
import org.apache.thrift.protocol.TBinaryProtocol; 
import org.apache.thrift.protocol.TCompactProtocol; 
import org.apache.thrift.protocol.TJSONProtocol; 
import org.apache.thrift.protocol.TProtocolFactory; 
import org.apache.thrift.server.TServer; 
import org.apache.thrift.server.TSimpleServer; 
import org.apache.thrift.transport.TFastFramedTransport; 
import org.apache.thrift.transport.TFramedTransport; 
import org.apache.thrift.transport.TServerSocket; 
import org.apache.thrift.transport.TTransportFactory; 
import org.slf4j.*; 
import java.net.ServerSocket; 
 
public class HelloWordServer { 
    public static void main(String[] args) throws Exception { 
        int port = 7912; 
        String transport_type = "buffered"; 
        String protocol_type = "binary"; 
        String server_type = "thread-pool"; 
        String domain_socket = ""; 
//        ServerSocket socket = new ServerSocket(7912); 
        // Protocol factory 
        TProtocolFactory tProtocolFactory = null; 
        if (protocol_type.equals("json")) { 
          tProtocolFactory = new TJSONProtocol.Factory(); 
        } else if (protocol_type.equals("compact")) { 
          tProtocolFactory = new TCompactProtocol.Factory(); 
        } else { 
          tProtocolFactory = new TBinaryProtocol.Factory(); 
        } 
 
        TTransportFactory tTransportFactory = null; 
 
        if (transport_type.equals("framed")) { 
          tTransportFactory = new TFramedTransport.Factory(); 
        } else if (transport_type.equals("fastframed")) { 
          tTransportFactory = new TFastFramedTransport.Factory(); 
        } else { // .equals("buffered") => default value 
          tTransportFactory = new TTransportFactory(); 
        } 
        TServerSocket serverTransport = new TServerSocket(new TServerSocket.ServerSocketTransportArgs().port(port));; 
        com.winwill.thrift.HelloWordService.Processor processor = new com.winwill.thrift.HelloWordService.Processor(new HelloWordServiceImpl()); 
        TServer.Args tServerArgs = new TServer.Args(serverTransport); 
        tServerArgs.processor(processor); 
        tServerArgs.protocolFactory(tProtocolFactory); 
        tServerArgs.transportFactory(tTransportFactory); 
        TServer server = new TSimpleServer(tServerArgs); 
        System.out.println("Running server..."); 
        server.serve(); 
    } 
} 
 
3.客户端请求 
 
package com.winwill.thrift; 
 
import org.apache.thrift.protocol.TBinaryProtocol; 
import org.apache.thrift.protocol.TProtocol; 
import org.apache.thrift.transport.TSocket; 
import org.apache.thrift.transport.TTransport; 
 
public class HelloWordClient { 
    public static void main(String[] args) throws Exception { 
        TTransport transport = new TSocket("【此处使用服务器ip地址】", 7912); 
        TProtocol protocol = new TBinaryProtocol(transport); 
 
        // 创建client 
        com.winwill.thrift.HelloWordService.Client client = new com.winwill.thrift.HelloWordService.Client(protocol); 
 
        transport.open();  // 建立连接 
 
        // 第一种请求类型 
        com.winwill.thrift.Request request = new com.winwill.thrift.Request() 
                .setType(com.winwill.thrift.RequestType.SAY_HELLO).setName("winwill2012").setAge(24); 
        System.out.println(client.doAction(request)); 
 
        // 第二种请求类型 
        request.setType(com.winwill.thrift.RequestType.QUERY_TIME).setName("winwill2012"); 
        System.out.println(client.doAction(request)); 
 
        transport.close();  // 请求结束,断开连接 
    } 
} 
 
在一台服务器上测试启动服务 
 
输出Running server... 
 
在另一台机器启动客户端 
 
输出 
 
Hello, winwill2012, Welcome! 
 
Hello, winwill2012, Now is 2016-10-13 17:06:47 
 
此时服务器端输出 
 
Get request: Request(type:SAY_HELLO, name:winwill2012, age:24) 
 
Get request: Request(type:QUERY_TIME, name:winwill2012, age:24) 
 
说明已经成功连接啦 
 
本文所用到的工具和工程已经打包上传到云盘,欢迎大家下载 
 
链接:http://pan.baidu.com/s/1jHQXSma 密码:65uh 
 |   
 
 
 
 |