RPC调用分类
- 同步调用:客户端等待服务端调用执行完成并返回结果
- 异步调用:客户端不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果,若客户端不关系调用返回结果,则变成单向异步调用,单向调用不用返回结果。
RPC结构拆解
- RPC 服务方通过 RpcServer 去导出(export)远程接口方法。
- 客户方通过 RpcClient 去引入(import)远程接口方法。
- 客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理 RpcProxy 。
- 代理封装调用信息并将调用转交给 RpcInvoker 去实际执行。
- 在客户端的 RpcInvoker 通过连接器 RpcConnector 去维持与服务端的通道 RpcChannel, 并使用 RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。
- RPC 服务端接收器 RpcAcceptor 接收客户端的调用请求,同样使用 RpcProtocol 执行协议解码(decode)。
- 解码后的调用信息传递给 RpcProcessor 去控制处理调用过程
- 最后再委托调用给 RpcInvoker 去实际执行并返回调用结果。
RPC组件职责
- RpcServer:负责导出(export)远程接口
- RpcClient:负责导入(import)远程接口的代理实现
- RpcProxy:远程接口的代理实现
- RpcInvoker:客户方实现(负责编码调用信息和发送调用请求到服务方并等待调用结果返回);服务方实现(负责调用服务端接口的具体实现并返回调用结果)
- RpcProtocol:负责协议编/解码
- RpcConnector:负责维持客户方和服务方的连接通道和发送数据到服务方
- RpcAcceptor:负责接收客户方请求并返回请求结果
- RpcProcessor:负责在服务方控制调用过程,包括管理调用线程池、超时时间等
- RpcChannel:数据传输通道