zoukankan      html  css  js  c++  java
  • dubbo源码2-rpc

    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:

  • 相关阅读:
    bash的shebang行
    Step By Step(Lua调用C函数)
    [Android问答] px、dp和sp,这些单位有什么区别?
    Android中Application类用法
    Android中SharedPreferences用法
    Android中SQLite用法
    SQLite应用实例
    Android中Parcelable接口用法
    iOS block 基本用法及代替代理
    Xcode插件
  • 原文地址:https://www.cnblogs.com/caiyao/p/14874449.html
Copyright © 2011-2022 走看看