thrift-TProcess
TProcess是⼀个接⼝,只提供了⼀个⽅法process,
public boolean process(TProtocol in, TProtocol out)
process有两个参数,in/out,这个分别是每次调⽤,在服务端接受消息的protocol和返回消息的protocol,TProcess有三类实现TBaseProcessor
TBaseProcessor是以同步的⽅式进⾏,其成员变量processMap存放了所有⽅法的引⽤(ProcessFunction),其中process⽅法被调⽤时,会从先按照⽅法名字到⽅法引⽤,并调⽤ProcessFunction的process⽅法。在之中会先获得所有参数,然后调⽤getResult,最后返回结果 public final void process(int seqid, TProtocol iprot, TProtocol oprot, I iface) throws TException {
T args = getEmptyArgsInstance();
try {
//从inProtocol读取参数
} catch (TProtocolException e) {
//异常处理
……
return;
}
TBase result = null;
try {
result = getResult(iface, args);
} catch(TException tex) {
//异常处理
…
…
return;
}
//不是oneway调⽤则需要输出返回结果
if(!isOneway()) {
oprot.writeMessageBegin(new TMessage(getMethodName(), TMessageType.REPLY, seqid
//向outProtocol写返回结果
result.write(oprot);
oprot.writeMessageEnd();
thrift}
}
TBaseAsyncProcessor
TBaseAsyncProcessor相较于TBaseProcessor,主要区别是异步调⽤,该实现类的process(TProtocol in, TProtocol out)被定义为直接返回false,⽽⾃⼰实现了process(final AsyncFrameBuffer fb)⽅法
其中会调⽤TAsyncClientManager的call⽅法,内部利⽤NIO的selector实现了SelectThread,进⾏异步的调⽤TMultiplexedProcessor
介绍的TProtocolDecorator对应在服务端需要使⽤TMultiplexedProcessor,该processor就是为了实现复⽤service⽽存在的processor,其内部存放了SERVICE_PROCESSOR_MAP,该map保存了名字和对应processor的键值对,其processor实现就是⾸先去除消息头部的servicename,然后传递message到到的processor只上,从⽽实现复⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论