thrift - processor服务分配层

Posted 小树桩的朋友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thrift - processor服务分配层相关的知识,希望对你有一定的参考价值。

(一)简介

    processor层主要负责通过客户端请求的接口名,选择特定的方法对客户端请求进行处理。

    是协议层和用户提供的服务实现之间的纽带定义了调用服务实现的接口框架。

(二)结构

技术分享

 

TProcessor、TDispatchProcessor为thrift类,为服务分配提供基类;在TDispatchProcessor类中实现process方法,先获取请求信息,在通过dispatchCall调用特定的服务方法。

XXXProcessor是由thrift自动生成的类,继承于TDispatchProcessor类,并实现了dispatchCall方法;通过map结构调用特定的process_XXX方法;而在process_XXX方法中读取请求参数,并通过调用XXXIf的特定方法完成实际服务端逻辑。

XXXHandler是用户实现的服务逻辑处理;继承于服务接口类XXXIf,实现具体的接口逻辑处理。

(三)实现

TProcessorEventHandler类

处理porcessor产生的事件的虚拟接口类,定义了一些事件发生时候的处理函数。

TProcessor类

输入流、输出流之间的服务器,负责调用用户定义的服务接口。

eventHandler_ TProcessorEventHandler 处理事件类

process(in, out, connectionContext) 纯虚函数

process(io, connectionContext)

TDispatchProcessor类

解析消息头,基于函数名调用函数。

process(io, connectionContext)process(in, out, connectionContext) 虚函数,实际处理请求

读取请求函数信息,并通过调用dispatchCall函数处理

dispatchCall(in, out, fname, seqid, callContext) 纯虚函数

XXXProcessor类

特定服务对应处理类

 iface_ XXXIf  服务接口对象 
 processMap_ map<string, ProcessFunction>  函数名-函数指针 对应map

构造函数XXXProcessor(XXXIf)

对iface_进行赋值,并将对应的函数名、函数指针加入processMap_

dispatchCall(in, out, fname, seqid, callContext)

在processMap_通过函数名,找到则调用对应函数process_XXX(seqid, in, out, callContext)

process_XXX(seqid, in, out, callContext)

获取上下文、获得请求信息、调用对应服务处理函数、返回处理结果

TProcessorContextFreer类

帮助类,帮助生成的代码释放上下文资源

(四)总结

在TDispatchProcessor类中指定请求调度方式,先获取请求信息,再调用特定服务的dispatchCall

在XXXProcessor类中实现dispatchCall,通过map方式调用特定处理方法process_XXX

 

以上是关于thrift - processor服务分配层的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Thrift 的服务多路复用

RPC原理与实践----Thrift分层模型

dubbo协议层 jsonrpc协议迁移到http协议

半小时入门Thrift

Thrift 源码学习一

Apache IoTDB源码解析(0.11.2版本):Session的源码解析