Dubbo系列之RPC分析(七)
本章整体分析一下dubbo的RPC实现机制和相关的源代码,代码对应的模块是dubbo-rpc.
首先熟悉一下核心接口和类的功能:
:所谓暴露服务就是对外暴露一个它,它持有一个Invoker,能够管理器生命周期
public interface Exporter<T> { /** * get invoker. * * @return 持有一个invoker对象 */ Invoker<T> getInvoker(); /** * unexport. * <p> * <code> * getInvoker().destroy(); * </code> */ void unexport(); }
:对暴露服务的一个监听,它有一个对应的实现就是:
:核心过滤功能,其内部的实现有很多,大概有如下截图所示:
:保存要执行的参数信息,对应的实现是
:一个能够执行的服务,实现有很多都是通过adaptive机制进行适配的
:监听Invoker的,有一个对应的实现是
:对外服务的暴露协议,内部实现有很多,是基于adaptive机制进行适配的
:实现一个对象的代理工厂,内部有2中实现,通过spi机制获取的
:PRC调用的结果,对应的实现就是
一般RPC是要调用Remoting模块一起完成整个流程的使用.
理解一下特定名词的含义:
Dubbo中的Invoker有许多实现类型,大致分成四类
1、AbstractClusterInvoker的子类型
2、AbstractInvoker的子类型
3、AbstractProxyInvoker的子类型
4、其他Invoker接口的子类型。
1、 AbstractClusterInvoker
AbstractClusterInvoker是dubbo对集群调用的一个封装,
AbstractClusterInvoker及其子类型中持有Directory的引用,该Directory正是在一个或多个注册中心中,可用Invoker的目录维护。
总之,AbstractClusterInvoker及其子类型,是用于集群调用的,并非真正的调用实现Invoker。
2、AbstractInvoker
AbstractInvoker的子类型是真正对远程调用的执行过程,例如DubboInvoker、ThriftInvoker等都是该类型的子类型。
3、AbstractProxyInvoker
AbstractProxyInvoker 是服务方暴露服务时,对服务方法调用的抽象,也就是说,所有该服务的调用,最终都会通过该代理,调用到服务类型中去。