上一篇文章对ReferenceBean的初始化的过程有了初步了解,下面我们深入分析它是如何获取zookeeper上service provider的url地址的,并转换成可调用的invoker的。
回到RegistryProtocol类中doRefer方法中,我们看到如下代码directory订阅节点信息。
directory.subscribe(subscribeUrl.addParameter(CATEGORY_KEY,PROVIDERS_CATEGORY + "," + CONFIGURATORS_CATEGORY + "," + ROUTERS_CATEGORY));
跟踪代码至RegistryDirectory的subscribe方法,实际调用registry的订阅方法,此处为ZookeeperRegistry,并将当前RegistryDirectory实例对象当做监听器参数传入。
public void subscribe(URL url) {
setConsumerUrl(url);
CONSUMER_CONFIGURATION_LISTENER.addNotifyListener(this);
serviceConfigurationListener = new ReferenceConfigurationListener(this, url);
registry.su