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:

  • 相关阅读:
    ROW_NUMBER()用法(转)
    winform MD5值生成
    VC使用“添加方法向导”添加调度映射方法“
    MyGeneration配置说明
    dataGridView取消自动生成列
    PHP魔术常量(magic constant)
    Eclipse添加DTD文件实现xml的自动提示功能
    Google:5个常见的SEO错误和6个SEO好主意
    PHP检查PEAR是否工作
    手把手教你在ubuntu上安装LAMP
  • 原文地址:https://www.cnblogs.com/caiyao/p/14874449.html
Copyright © 2011-2022 走看看