dubbo ReferenceConfig源碼分析


簡單的客戶端

ApplicationConfig applicationConfig = new ApplicationConfig("client");
RegistryConfig registryConfig = new RegistryConfig("zookeeper://192.168.150.120:2181");
ReferenceConfig referenceConfig = new ReferenceConfig();
referenceConfig.setRegistry(registryConfig);
referenceConfig.setInterface(UserService.class);
referenceConfig.setApplication(applicationConfig);
UserService userService = (UserService) referenceConfig.get();
System.out.println(userService.getName("1111"));    

查看get方法的源碼
這里有一個初始化的方法,我們看一下

這個方法很長,我們知道get所獲得一個代理對象,上面的代碼不用管,我們看createProxy(map)方法,參數主要是接口信息等等

前面主要是檢測獲取注冊中心的地址放入到urls的ArrayList中,重點是下面這個方法


REF_PROTOCOL這里又是一個代理對象,我們使用ctrl+alt+b找到基於Protocol接口實現的類RegistryProtocol

前面主要是獲取zk的地址等等,重點看干活的doRefer方法

RegistryDirectory理解為保存提供者的目錄 registry.register()向注冊中心注冊消費端信息

subscribe訂閱剛剛注冊的地址,具體實現在ZookeeperRegistry.doSubscribe(),內部有一個doNotify方法會執行RegistryDirectory的notify方法監聽zookeeper當提供者地址變更時會刷新RegistryDirectory
繼續看cluster.join 執行MockClusterWrapper.join()方法,創建一個MockClusterInvoker()
回到ReferenceConfig.createProxy
最后返回(T) PROXY_FACTORY.getProxy(invoker, ProtocolUtils.isGeneric(generic))進入
StubProxyFactoryWrapper,第一句調用AbstractProxyFactory.getProxy又調用JavassistProxyFactory.getProxy最后返回動態代理對象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM