一步步学会Thrift服务搭建和调用

简介: <p><span style="font-size:14px"><span style="white-space:pre"></span></span></p> <p align="left">       Thrift是什么,有什么优势?这里就不阐述了,百度即可。本文旨在于展现Thrift服务搭建和调用的过程,让初学者少走弯路。本文提供完整代码及所需jar和thrift-0.9.3.e

       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.exeThrift开发所需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,至此客户端完成。

 



 

 

 


目录
相关文章
|
4月前
|
前端开发 Java Apache
Apache Zeppelin系列教程第七篇——运行paragraph的整个流程分析
Apache Zeppelin系列教程第七篇——运行paragraph的整个流程分析
33 0
|
4月前
|
流计算
自己动手实现一个 rpc
自己动手实现一个 rpc
23 0
|
编解码 分布式计算 Java
基于 netty 封装的超简单通俗易用 服务端客户端交互框架 《net-framework》原理,源码和使用说明,开箱即用,只需要开发业务逻辑,完全自定义无限扩充 [结尾附github源码]
基于 netty 封装的超简单通俗易用 服务端客户端交互框架 《net-framework》原理,源码和使用说明,开箱即用,只需要开发业务逻辑,完全自定义无限扩充 [结尾附github源码]
基于 netty 封装的超简单通俗易用 服务端客户端交互框架 《net-framework》原理,源码和使用说明,开箱即用,只需要开发业务逻辑,完全自定义无限扩充 [结尾附github源码]
|
JSON 负载均衡 安全
手把手教你写一个RPC框架(三)
手把手教你写一个RPC框架(三)
121 0
|
分布式计算 Dubbo Java
手把手教你写一个RPC框架(二)
手把手教你写一个RPC框架(二)
122 0
手把手教你写一个RPC框架(二)
|
安全 Java Linux
手把手教你搭个Frida + Sekiro Rpc框架
手把手教你搭个Frida + Sekiro Rpc框架
手把手教你搭个Frida + Sekiro Rpc框架
|
Java 应用服务中间件 API
Java小白踩坑录 - 如何设计不用后期升级的客户端API?
Java小白踩坑录 - 如何设计不用后期升级的客户端API?
92 0
Java小白踩坑录 - 如何设计不用后期升级的客户端API?
|
编译器 Apache
Thrift架构与使用方法
Thrift架构与使用方法
197 0
Thrift架构与使用方法
|
XML NoSQL 中间件
手写RPC框架第三章《RPC中间件》
1、注册中心,生产者在启动的时候需要将本地接口发布到注册中心,我们这里采用redis作为注册中心,随机取数模拟权重。 2、客户端在启动的时候,连接到注册中心,也就是我们的redis。连接成功后将配置的生产者方法发布到注册中心{接口+别名}。 3、服务端配置生产者的信息后,在加载xml时候由中间件生成动态代理类,当发生发放调用时实际则调用了我们代理类的方法,代理里会通过netty的futuer通信方式进行数据交互。
428 0
手把手带你调试阅读Netty启动服务流程源码
手把手带你调试阅读Netty启动服务流程源码
80 0
手把手带你调试阅读Netty启动服务流程源码