博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一步步学会Thrift服务搭建和调用
阅读量:6881 次
发布时间:2019-06-27

本文共 3613 字,大约阅读时间需要 12 分钟。

       Thrift是什么,有什么优势?这里就不阐述了,百度即可。本文旨在于展现Thrift服务搭建和调用的过程,让初学者少走弯路。本文提供完整代码及所需jar和thrift-0.9.3.exe。点击此处下载完整工程:

先来张目录结构图

1、下载所需jar和thrift-0.9.3.exe

              下载地址:

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,至此客户端完成。

 

 

 

 

你可能感兴趣的文章
System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。...
查看>>
GIT入门笔记(20)- git 开发提交代码过程梳理
查看>>
【Vue 入门】使用 Vue2 开发一个展示项目列表的应用
查看>>
容器使用笔记(List篇)
查看>>
Duilib Edit编辑框禁止输入中文的方法
查看>>
vim使用技巧大全
查看>>
Java 集合类
查看>>
160多个android开源码汇总
查看>>
jQuery序列化表单数据 serialize()、serializeArray()及使用
查看>>
DotNetCore跨平台~Quartz热部署的福音~监控文件夹的变化
查看>>
S3C2440串口的基本使用
查看>>
[uart]linux串口的阻塞非阻塞切换
查看>>
parcel vue 简单使用
查看>>
数组循环移位的几种解法
查看>>
(4运行例子)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署
查看>>
Rxlifecycle(三):坑
查看>>
matplotlib绘图不显示问题解决plt.show()
查看>>
java多线程之happens-before
查看>>
html2canvas 实现dashed虚线边框
查看>>
MySQL/MariaDB触发器
查看>>