调用addRpcRe排列三网站搭建【征途源码论坛zhengtuwl.com】联系方式:QQ:2747044651quest向handler(特别提醒下读者这里的handler不是RpcHandler,而是通过TransportClient构造器传入的TransportResponseHandler)添加requestId与回调类RpcResponseCallback的引用之间的关系。TransportResponseHandler的addRpcRequest方法(见代码清单3)将更新最后一次请求的时间为当前系统时间,然后将requestId与RpcResponseCallback之间的映射加入到outstandingRpcs缓存中。outstandingRpcs专门用于缓存发出的RPC请求信息。
调用Channel的writeAndFlush方法将RPC请求发送出去,这和在《spark2.1.0之源码分析——服务端RPC处理器RpcHandler详解》一文列出的代码清单7中服务端调用的respond方法响应客户端的一样,都是使用Channel的writeAndFlush方法。当发送成功或者失败时会回调ChannelFutureListener的operationComplete方法。如果发送成功,那么只会打印requestId、远端地址及花费时间的日志,如果发送失败,除了打印错误日志外,还要调用TransportResponseHandler的removeRpcRequest方法(见代码清单4)将此次请求从outstandingRpcs缓存中移除。
代码清单3 添加RPC请求到缓存

public void addRpcRequest(long requestId, RpcResponseCallback callback) {
updateTimeOfLastRequest();
outstandingRpcs.put(requestId, callback);
}
代码清单4 从缓存中删除RPC请求