rpc-api包的基本抽象主要类,invoker负责执行一个invocation代表的rpc请求,并返回result;exporter表示一个导出服务;protocol为协议层,上层负责该协议服务的导出和引用;proxyfactory为代理底层工厂,负责invoker和实现类之间的转换。
protocol包主要包括protocol、invoker、exporter的基础实现,主要包括:
abstractprotocol: 结合asynctosyncinvoker,给异步调用转成同步调用。
abstractproxyprotocol: 结合proxyfactory,给protocol接口export方法和refer方法传入的参数进行转换后给底层子类使用,主要转换逻辑:
export: proxy给invoker参数转成实现类,然后给子类提供实现类以及url来做具体export操作。
refer: 子类给类型和url转换成实现类,然后proxy给实现类转成invoker,最后abstractproxyprotocol给invoker外再包一层abstractinvoker作为refer方法的返回。
protocollistenerwrapper: 通过spi给配置的listener包装到protocol上。
protocolfilterwrapper:通过spi给配置的filter包装到protocol上。
abstractinvoker: 包装解析url参数和class值到invocation中逻辑,子类实现doInvoker方法。
abstractExport: 包装unexport逻辑,直接转调invoker。
proxy包主要定义了代理工厂接口和实现类,代理工厂主要做的事是提供invoker和实现类之间的转换,主要方法是getInvoker和getproxy,主要实现类包括jdkproxyfactory和javaassitproxyfactory,还包含一个abstractproxyinvoker,注释说是给provider端用的,依赖proxy。proxyfactory还有个实现类是stubproxyfactorywrapper,为了实现本地存根用。具体逻辑是如果invoker的interface不是generalservice,则取当前interface的stub或者local后缀的类,并且实例化,导出,然后作为proxy返回。导出这个我不是太明白,
filter包顾名思义就是各种invoker的filter
listener里是invoker和export的listener
dubbo包下是协议的具体实现,实现了api包下的主要扩展点,主要包括:Protocol/Invoker;然后基于transport/exchange实现了具体的功能。主要实现点为dubboprotocol类的export和protocolbindingrefer方法。
export: 根据url里参数创建exchangeserver,绑定端口,并注册replay方法,在replay方法里通过channel找到invoker,并执行invoker方法进行请求应答。
protocolbindingrefer: dubboinvoker里维护多个Client,client通过exchange层获得,需要请求时执行client的request方法获取请求结果。
todo: