美文网首页工作生活
thrift事件交互

thrift事件交互

作者: 5eac0cfdd510 | 来源:发表于2019-07-01 20:22 被阅读0次

一、thrift

  • 1 thrift简介
    Thrift是一个RPC框架,由facebook开发。它支持可扩展且跨语言的服务的开发,它结合了功能强大的软件堆栈和代码生成引擎,以构建在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk and OCaml等等编程语言间无缝结合的、高效的服务。Thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言
  • 2 thrift基础架构


    thrift.png

    thrift在设计上分四个层次,从下到上分别是:

  • Transport层:抽象了数据在网络中的传输;
  • Protocol层:定义了数据的序列话,反序列化方式。常用的格式有:二进制、压缩格式和json格式;
  • Processor层: Thrift中最关键的一层,它包含thrift文件生成的接口,以及这些接口对应的实现;
  • Server层: 将所有这些(Transport,Protocol与Processor)封装在一起,对外提供服务;

二、mac安装thrift步骤

 brew install thrift
  • 版本输出:thrift -version

三、thrift使用

  • 3.1 创建thrift文件
namespace java cn.bintools.daios.example.thrift
service HelloService{
 i32 add(1:i32 num1,2:i32 num2)
}
  • 3.2 生成相应语言的文件 (已java为例)

  • 3.2.1 命令执行
    thrift --gen java hello.thrift
    \color{#ea4335}{通用语言定义:thrift --gen<language> <Thrift filename>}

  • 3.2.2 命令执行后,会在当前目录中多一个gen-java目录,生成的文件就在里面。结果如下图:


    thriftResult.png
  • 3.3.3 查看HelloService.java文件的内容会发现,定义的hello.thrift文件方法实际是封装在Iface接口中,这意味这服务需要实现的是HelloService.Iface

##thrift文件生成的java文件
package cn.bintools.daios.example.thrift;
@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2019-05-14")
public class HelloService {
 
  public interface Iface {
 
    public int add(int num1, int num2) throws org.apache.thrift.TException;
 
  }
// ... 还有其他生成的方法、类等
}

四、thrift 语言

1)编写IDL文件时需要注意的问题
函数的参数要用数字依序标好,序号从1开始 形式:“序号:参数名”;
每个函数的最后要加上“,”最后一个函数不加;
在IDL中可以使用/.... ..../添加注释
2)IDL支持的数据类型
IDL大小写敏感,它共支持以下几种基本的数据类型:
[1]string, 字符串类型,注意是全部小写形式;例如:string aString
[2]i16, 16位整形类型,例如:i16 aI16Val;
[3]i32,32位整形类型,对应C/C++/java中的int类型;例如: I32 aIntVal
[4]i64,64位整形,对应C/C++/java中的long类型;例如:I64 aLongVal
[5]byte,8位的字符类型,对应C/C++中的char,java中的byte类型;例如:byte aByteVal
[6]bool, 布尔类型,对应C/C++中的bool,java中的boolean类型; 例如:bool aBoolVal
[7]double,双精度浮点类型,对应C/C++/java中的double类型;例如:double aDoubleVal
[8]void,空类型,对应C/C++/java中的void类型;该类型主要用作函数的返回值,例如:void testVoid(),
除上述基本类型外,IDL还支持以下类型:
[1]map,map类型,例如,定义一个map对象:map<i32, i32> newmap;
[2]set,集合类型,例如,定义set<i32>对象:set<i32> aSet;
[3]list,链表类型,例如,定义一个list<i32>对象:list<i32> aList;

五、项目搭建

  • 5.1 pom文件依赖
<dependency>
  <groupId>org.apache.thrift</groupId>
  <artifactId>libthrift</artifactId>
  <version>0.12.0</version>
</dependency>

\color{#ea4335}{这里的版本号与生成helloServer.java的thrift的版本相同。不同则helloServer.java文件中会报错:@org.apache.thrift.annotation.Nullable 缺少}

  • 5.2 服务端开发
    • 5.2.1 实现HelloService.Iface接口
public class HelloServiceImpl implements HelloService.Iface{
  public int add(int num1,int num2) throws IException{
   return num1+num2
  }
}
  • 5.2.2 通过libthrift提供类库,将服务暴露出去
package impl;

import cn.bintools.daios.example.thrift.HelloService;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;

/**
* 服务端
*
* @author <a href="jian.huang@bintools.cn">yunzhe</a>
* @version 1.0.0 2019-05-14-下午4:23
*/
public class HelloServiceDemo {

   public static void main(String[] args) {
       try {
           HelloService.Processor<HelloServiceImpl> processor = new HelloService.Processor<HelloServiceImpl>(new HelloServiceImpl());
           TServerTransport serverTransport = new TServerSocket(8888);
           TServer.Args param = new TServer.Args(serverTransport);
           param.processor(processor);
           param.protocolFactory(new TBinaryProtocol.Factory());

           TServer server = new TSimpleServer(param);
           System.out.println("Starting Thrift Server ... ...");
           server.serve();
       } catch (TTransportException e) {
           e.printStackTrace();
       }
   }
}
  • 5.3客户端开发
package impl;
import cn.bintools.daios.example.thrift.HelloService;
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;
 
/**
 * 客户端
 *
 * @author <a href="jian.huang@bintools.cn">yunzhe</a>
 * @version 1.0.0 2019-05-14-下午4:29
 */
public class HelloServiceClient {
    public static void main(String[] args) {
        try {
            TTransport tTransport = new TSocket("127.0.0.1", 8888);
            tTransport.open();
 
            TProtocol protocol = new TBinaryProtocol(tTransport);
            HelloService.Client client = new HelloService.Client(protocol);
            System.out.println(client.add(200,200));
            tTransport.close();
        } catch (TTransportException e) {
            e.printStackTrace();
        }catch (TException e){
            e.fillInStackTrace();
        }
    }
}

码云地址:https://gitee.com/huangjian163/thirft.git

六、总结

在本地搭建thrift并通过命令生成需要的语言的文件目前已经可以正常和使用。但是如何集成到spring boot项目中?请查看下一篇文章,地址为:https://www.jianshu.com/p/3ca4a44c2a4c

相关文章

  • thrift事件交互

    一、thrift 1 thrift简介Thrift是一个RPC框架,由facebook开发。它支持可扩展且跨语言的...

  • spring boot项目集成thrift事件交互

    一、前言 上一篇文章对thrift进行说明,同时搭建了简单的Java项目对thrift服务端,客户端的项目搭建。但...

  • 【Axure10】交互功能-交互事件-页面交互事件

    交互功能-交互事件-页面交互事件 鼠标相关交互事件 【中】页面单击时 针对的是鼠标单击事件,可以实现鼠标单击的触发...

  • Thirft

    一、About thrift二、什么是thrift,怎么工作?三、Thrift IDL四、Thrift D...

  • Docker&k8s微服务学习实践(二)

    一、下载配置thrift 从Thrift官网 http://thrift.apache.org/ 下载thrift...

  • 数据指标分析

    一个事件+ 两个变量 产品交互性参与事件、 交互功能类型---事件级变量 交互功能页面名称---页面级变量 1.浏...

  • DOM事件

    DOM事件的概念 事件是javascript和HTML交互基础,。交互;比如鼠标点击事件、敲击键盘事件等。这样的事...

  • Thrift服务端源码分析(FrameBuffer )

    Thrift服务端在调用使用Selector(选择器)进行轮询的时候,遇到读事件,写事件的时候,通过调用Frame...

  • DOM级别与DOM事件

    事件是javascript和HTML交互基础, 任何文档或者浏览器窗口发生的交互, 都要通过绑定事件进行交互;比如...

  • Doris 源码分析 (五) gRpc 与 thrift 接口

    FE 与 BE 交互 在 FE 端与 BE 端均存在一个任务 Queue,如上图所示,从当前版本来看 thrift...

网友评论

    本文标题:thrift事件交互

    本文链接:https://www.haomeiwen.com/subject/foincctx.html