zoukankan      html  css  js  c++  java
  • 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的过程。

       

        

  • 相关阅读:
    《Dubbo》接入与调用流程
    SpringBoot自定义配置实现与解析
    Docker使用笔记记录
    Elasticsearch(一):介绍与安装
    索引的建立与使用规范
    RocketMQ(一):介绍与安装
    NETCORE使用MINIO的PRESIGNEDPUTOBJECTASYNC方法,实现通过浏览器直接上传图片到MINIO服务器
    Minio 使用.NET + Vue 实现断点续传、秒传
    VS Code中小程序与Vue常用插件合集(前端合集)
    [瞎想笔记] 浅浅浅谈期望
  • 原文地址:https://www.cnblogs.com/xjz1842/p/9885942.html
Copyright © 2011-2022 走看看