Thrift学习

2020-02-22  本文已影响0人  一蓬蒿人

架构图


Thrift组件

IDL组件

namespace java com.thrift.test
 
struct Parameter{
    1: required i32 id;
    2: required string name;
}
 
service DemoService{
    i32 demoMethod(1:string param1, 2:Parameter param2, 3:map<string,string> param3);
}

执行命令

thrift -r --gen java demo.thrift

生成结果


  1. 接口类型,默认名称都是Iface。这个接口类型被服务器和客户端共同使用。
    自动生成的接口有两个,一个是同步调用的Iface,一个是异步调用的AsyncIface。异步调用的接口多了一个回调参数。
  2. 客户端类型,一个同步调用Client,一个异步调用AsyncClient
  3. Processor,用来支持方法调用,每个服务的实现类都要使用Processor来注册,这样最后服务器端调用接口实现时能定位到具体的实现类。
    4.方法参数的封装类,以"方法名_args"命名。
    5.方法返回值的封装类,以"方法名_result"命名。

TProcessor组件

TProcessor负责对Client的请求做出相应,包括RPC请求转发,调用参数解析和用户逻辑调用,返回值写回等处理步骤。Processor是服务器端从Thrift框架转入用户逻辑的关键流程。Processor同时也负责向Message结构中写入数据或者读出数据。


TProtocol组件

TProtocol负责把TTransport中的字节流转化为数据流,并定义了具体的转换格式。TProtocol主要做两件事: 1) 双向有序的消息传递; 2) 基本类型、容器及结构体的编码。

TTransport组件

TTransport是与底层数据传输紧密相关的传输层。每一种支持的底层传输方式都存在一个与之对应的TTransport。在TTransport这一层,数据是按字节流(Byte Stream)方式处理的,即传输层看到的是一个又一个的字节,并把这些字节按照顺序发送和接收。TTransport并不了解它所传输的数据是什么类型,实际上传输层也不关心数据是什么类型,只需要按照字节方式对数据进行发送和接收即可。数据类型的解析在TProtocol这一层完成。

TServer组件

TServer在Thrift框架中的主要任务是接收Client的请求,并转到某个TProcessor上进行请求处理。针对不同的访问规模,Thrift提供了不同的TServer模型。Thrift目前支持的Server模型包括:

TServer对象通常如下工作:

  1. 使用TServerTransport获得一个TTransport
  2. 使用TTransportFactory,可选地将原始传输转换为一个适合的应用传输(典型的是使用TBufferedTransportFactory)
  3. 使用TProtocolFactory,为TTransport创建一个输入和输出
  4. 调用TProcessor对象的process()方法

参考

Thrift源码分析系列
Thrift由浅入深
Thrift RPC详
Thrift TServer模型

上一篇 下一篇

猜你喜欢

热点阅读