1.构建零时Url
temp://localhost?application=web-pubfund&default.timeout=10000&dubbo=2.5.3&interface=cn.gov.zcy.id.service.IdentityService&logger=slf4j&methods=retrieve&pid=86255&revision=3.0.0-RELEASE&side=consumer&timeout=3000×tamp=1611737175525&version=1.0.0
2.组装注册中心地址
registry://172.16.101.50:1500/com.alibaba.dubbo.registry.RegistryService?application=web-pubfund&dubbo=2.5.3&logger=slf4j&pid=86255®istry=zookeeper&timeout=3000×tamp=1611737411547
3.获取Invoker
3.1
refprotocol.refer(interfaceClass, url)
RegistryProtocol.refer之前会进入包装类ProtocolListenerWapper 和ProtocolFilterWapper如果是registry直接调用RegistryProtocol.refer,如果不是,则会构建拦截器链buildFilterChain(DubboInvoker)
下面来分析RegistryProtocol.refer
RegistryProtocol中有cluster:Cluster$Adaptive
通过RegistryFatcory.getRegistry(Url) 拿到Registry注册器(
首先从map从取,取不到createRegistry
从Registry=zookeeper中new ZookeeperRegistry(url,ZookeeperTransporter)里面会连接zk,然后增 连接监听
RegistryProtocol.doRefer(cluster,registry,type,url)
创建new RegistryDirectory
向zk注册自己
订阅监听provides,Configuratators,routers
cluster.join(directory)
invoker=MockClusterWapper.join(new MockClusterInvoker(FailOverClusterInvoker.join(new FailOverClusterInvoker)))
4.创建代理对象
proxyFactory.getProxy(Invoker invoker)
进入StubProxyFactoryWapper的getProxy方法
调用javassistProxyFactory的getProxy方法
(T) Proxy.getProxy(interfaces).newInstance(new InvokerInvocationHandler(invoker));