• Dubbo源码分析之Exporter---服务暴露(本地和远程)


      源码的版本是 2.7.0  

          前面介绍了,dubbo是怎么解析xml中的bean的,今天来分析下bean的导出的过程,这里服务的类是ServiceBean

             当Spring完成对ApplicationContext的Refresh方法最后,会发布的一个ContextRefreshedEvent事件,这样保证所有Bean都已经完成了解析、注册、初始化等工作。

        这里服务的导出是使用了Spring的监听机制,ServiceBean实现了ApplicationListener<ContenxtRefresh>,ApplicationContext发布的ContenxtRefreshedEvent

    会触发监听事件给监听事件, 执行onApplicationEvent方法。

           可以看到这里Iexport方法就是,服务导出的流程都是在这里做的。

      

           这里可以看到,如果配置delay这个参数,是利用线程池去异步去导出,调用doExport函数去,是实现服务

    的导出。

     

         doExportUrls方法是导出URL,Dubbo所有的Bean的服务都是URL的方式导出的。

          这里可以看出doExprotUrlsForProtocol方法是导出URL到Rrotocol层,

      

         这里是根据配置的scope来决定是本地导出,还是远程导出。expportLocal是本地暴露,

          这里主要本地导出流程,首先通过proxyFactory的getInvoker方法,转换成Invoker,这里proxyFactory对象实际的扩展对象是javassistProxyFactory,

      

         这里可以看到getInvoker方法,返回的其实IAbstractProxyInvoker,  然后由protocol调用export方法到处得到Exproter, 这里的protocol的实际对象是

      DubboProtocol, 调用export方法。

      

              然后调用openServer方法,开启服务。

              如果没有服务,则创建服务,接着createServer的方法。

        这里是Exchanges.bind来绑定的URL和requestHandler 返回,ExchangeServer主要是管理通信的,而真实通信的是I由Transptorter完成,dubbo目前

    扩展有netty和mina以及grizzly等通信框架。

             requestHandler主要处理的数据的解码和反射调用方法,并返回数据等操作。下面的截图可以出来。详细的在下一篇介绍。

      

              这个整个过程,dubbo完成的是服务提供者的服务导出。这时候还不能提供消费者使用,主要的是注册中心还没有介绍,接下来在分析。

    总结:

            今天,主要分析服务的本地导出为Exporter的过程。

       

        

  • 相关阅读:
    vue多个自定义组件动态显示
    vue弹出多个弹框,并可以拖动弹框
    localStorage和sessionStorage
    Sharepoint ListTemplateId
    SharePoint 上传文档太大 无法上传
    Stream Byte[] 转换
    C#转义字符 单引号 双引号 换行 回车 斜杠
    c#中如何获取本机用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存
    SharePoint Content Type ID's
    Visual Studio Tip: Get Public Key Token for a Strong Named Assembly 添加强命名 获取强命名值
  • 原文地址:https://www.cnblogs.com/xjz1842/p/9885942.html
Copyright © 2020-2023  润新知