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×tamp=1542779223302
可以看到dubbo的url是 /之前的,都是创建持久节点,其他的都是创建的是临时节点。
后面,就是利用 registry调用subscribe函数去订阅zookeeper的状态,这里有兴趣的可以深入看下里面的代码。
总结:
今天,主要服务注册的过程有个大致的了解。后续会分析服务的Transporter和Exchanger的层。