Dubbo的服务注册--Zookeeper

    Dubbo源码的版本的2.7.0。

    服务这册中心,dubbo其实实现几种组件,如 multicast, default redis,zookeeper

         

      今天要讲的是zookeeper这个服务注册。下面是dubbo.properties注册中心的配置方式。

       

      这个XML配置的初始化的过程,之前的文章已经详细分析过了,这里就不详细说了, 这里服务注册,最终会调用的RegisterProtocol中的export。

  

      这里会调用registerProtocol中的export函数,主要的逻辑是注册服务到zookeeper, 下面是export的代码。

    

          首先,是调用doLocalExport方法,这个方法是先做本地导出。

   当前类中存ConcurrentHashMap的变量bounds,key就是URL的字符串,值对象是ExporterChangeableWrapper对象,这个对象又封装了 protocol的导出invokerDelegete和originInvoker, 这里Protocol的export方法是

  服务提供者的的url, 导出URL。   

     

      getRegistry方法则是通过扩展机制加载Register,这个实际是ZookeeperRegister,  进行注册到zookooper.,那么接下来看下Zookeeper的

     

     它的核心方法是doRegister,真正向zookeeper创建路径,是zkClient, 这个CuratorZookeeperClient, 也是使用Curator这个客户端的封装实现的,

    

    这里看下create方法,终于看到熟悉的操作zookeeper的节点的创建,例如dubbo://192.168.4.183:20880/org.apache.dubbo.demo.DemoService?anyhost=true&application=demo-provider&dubbo=2.0.2&generic=false&interface=org.apache.dubbo.demo.DemoService&methods=sayHello&pid=89545&side=provider&timestamp=1542779223302

     可以看到dubbo的url是 /之前的,都是创建持久节点,其他的都是创建的是临时节点。

   后面,就是利用 registry调用subscribe函数去订阅zookeeper的状态,这里有兴趣的可以深入看下里面的代码。

      

总结:

     今天,主要服务注册的过程有个大致的了解。后续会分析服务的Transporter和Exchanger的层。 

   

 

posted on 2018-11-22 11:38  xjz1842  阅读(368)  评论(0编辑  收藏  举报

导航