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 条评论
下一页