Thrift是什么,有什么优势?这里就不阐述了,百度即可。本文旨在于展现Thrift服务搭建和调用的过程,让初学者少走弯路。本文提供完整代码及所需jar和thrift-0.9.3.exe。点击此处下载完整工程:https://github.com/zxiaofan/OpenSource_Study/tree/master/Thrift
先来张目录结构图
1、下载所需jar和thrift-0.9.3.exe
下载地址:thrift-0.9.3.exe、Thrift开发所需jar。
2、解压thrift-0.9.3.exe到本地目录(如:E:\Thrift ),建议全英文目录,并修改名字为thrift.exe(方便敲命令)。
3、添加thrift.exe目录到系统环境变量
在系统变量path后添加“ ;E:\Thrift ”,注意分号哦。
4、下载ThriftTest.thrift 到thrift.exe目录。点击下载
这里提供了现成的Thrift文件,相关的编写方法,网络很多,就不赘述。亦可参照我收集的(点击访问我的个人有道云笔记)。
5、CMD定位到E:\Thrift ,执行命令
cd /d E:\Thrift
即可。
6、生成java文件
接着在命令行输入:
thrift.exe -r -genjava ./ThriftTest.thrift
,此时会在thrift.exe目录生成gen-java文件夹,里面的就是我们所需的ThriftHelloWorld.java文件了。
7、接下来就是编写服务端了。
①首先实现我们的接口,注意要实现Iface接口哦。
package service; import thrift.ThriftHelloWorld.Iface; /** * 服务端实现类 * */ public classHelloServiceImpl implements Iface { public String sayHello(String username) { return "hello " + username; } public String getRandom() { return "random"; } }
②在src目录下新建thrift包,将先前生成的ThriftHelloWorld.java拷贝进去;
③新建startServer用于启动服务,
package service; import org.apache.thrift.protocol.TBinaryProtocol.Factory; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.server.TThreadPoolServer.Args; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TTransportException; import thrift.ThriftHelloWorld; import thrift.ThriftHelloWorld.Processor; /** * 启动服务 * */ public classStartServer { /** * 启动Thrift服务器 */ public void startServer() { try { // 定义传输的socket,设置服务端口为6789 TServerSocket serverTransport = newTServerSocket(6789); // 设置协议工厂为 TBinaryProtocol.Factory Factory proFactory = newFactory(true, true); // 关联处理器与 Hello服务的实现 ThriftHelloWorld.Processorprocessor = new Processor(new HelloServiceImpl()); // 定义服务端的参数值 Args args = newArgs(serverTransport); args.processor(processor); args.protocolFactory(proFactory); TServer server = newTThreadPoolServer(args); // 服务端开启服务s server.serve(); } catch (TTransportException e) { e.printStackTrace(); } } public static void main(String[] args) { System.out.println("ServerStart!"); StartServer server = new StartServer(); server.startServer(); } }
服务端就此完成,启动main函数,控制台输出Server Start!。
发布的时候只需将此工程导出为可执行jar或将工程稍作修改用tomcat发布。
8、编写客户端,完成服务调用
①同样在src目录下新建thrift包,将先前生成的ThriftHelloWorld.java拷贝进去;
②创建ClientTest类用于调用服务
package client; import org.apache.thrift.TException; 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 org.apache.thrift.transport.TTransportException; import org.junit.Test; import thrift.ThriftHelloWorld; /** * 客户端实现 * */ public classClientTest { /** * 调用Hello服务 */ @Test public void startClient() { try { // 设置调用的服务地址为本地,端口为6789 TTransport transport = newTSocket("localhost", 6789); transport.open(); // 数据传输协议有:二进制协议、压缩协议、JSON格式协议 // 这里使用的是二进制协议 // 协议要和服务端一致 TProtocol protocol = new TBinaryProtocol(transport); ThriftHelloWorld.Client client =new ThriftHelloWorld.Client(protocol); // 调用服务器端的服务方法 System.out.println(client.sayHello("zxiaofan")); // 关闭 transport.close(); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { e.printStackTrace(); } } }
启动startClient,控制台输出hello zxiaofan,至此客户端完成。