Dubbo服务发现
2020-06-18 18:29:26   1  举报             
     
         
 dubbo服务发现
    作者其他创作
 大纲/内容
 getClients(url)为url创建连接
  发现服务
  FailoverCluster
  listener.notify(urls)
  个Cluster$Adaptive
  refreshInvoker(urls)
  该方法就是将跟新的服务url转换成map进行保存
  Invoker的网络连接以及后续的配置变更,都会调用这个notify方法urls: zk的path数据,这里表示的是dubbo:// 
  该方法调用哪个实现涉及到自适应扩展点
  ReferenceConfig
  DubboProtocol
  getProxy(invoker)
  subscribe
  RegistryDirectory
  join
  refer
  FailbackRegistry
  该方法很明显就是动态感知服务的变化,然后跟新服务
  doSubscribe
  super().notify
  这里把地址保存下来,这就是为什么注册中心挂了,也可以访问
  init()
  overrideDirectoryUrl
  在init方法中,首先把配置信息保存到一个map集合中,然后就调用createProxy真正创建ref
  doNotify
  toInvokers(invokerUrls)
  小总结: RegistryProtocol.refer 过程中有一个关键步骤,即在监听到服务提供者url时触发RegistryDirectory.notify() 方法。RegistryDirectory.notify() 方法调用 refreshInvoker() 方法将服务提供者urls转换为对应的 远程invoker ,最终调用到 DubboProtocol.refer() 方法生成对应的 DubboInvoker 。DubboInvoker 的构造方法中有一项入参 ExchangeClient[] clients ,即对应本文要讲的网络客户端 Client 。DubboInvoker就是通过调用 client.request() 方法完成网络通信的请求发送和响应接收功能。Client 的具体生成过程就是通过 DubboProtocol 的 initClient(URL url) 方法创建了一个HeaderExchangeClient 。 
  refreshOverrideAndInvoker
  saveProperties(url)
  JavassistProxyFactory
  返回代理类,这个类被包装成InvokerInvocationHandler(MockClusterWrapper(FailOverCluster(directory)))
  代理类的创建
  get()
    createProxy
  返回的invoker,应该是MockClusterWrapper(FailOverCluster(directory))
  由于默认情况下cluster:failover,所以getExtension(\"failover\")理论上应该返回FailOverCluster。但实际上,这里做了包装MockClusterWrapper(FailOverCluster)
  protocol.refer
  AbstractRegistry
  subscribe方法:订阅注册中心指定节点的变化,如果发生变化,则通知到RegistryDirectory。Directory其实和服务的注册以及服务的发现有非常大的关联. 
  notify
  ZookeeperRegistry
  doRefer
  RegistryProtocol
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 