dubbo服务引入

140 阅读1分钟

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&timestamp=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&registry=zookeeper&timeout=3000&timestamp=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));