本文借鉴自
http://www.jianshu.com/p/0f4113d6ec4b
(下面称简书教程)
首先上官网下载代码
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.thriftenum 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
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。