dubbo 3 ReferenceBean<T>消费者端初始化过程

四、ReferenceBean<T>消费者端初始化过程
1、ReferenceConfig的init()
   createProxy中也生成了registryUrl
   
   invoker = refprotocol.refer(interfaceClass, urls.get(0));
   同样这里会ProtocolListenerWrapper->ProtocolFilterWrapper->RegistryProtocol
   
2、RegistryProtocol的refer
   先注册消费者信息/dubbo/interfaceName/customs/{customUrl}
   然后订阅
    RegistryDirectory<T> directory = new RegistryDirectory<T>(type, url);
registry.register
directory.subscribe
当服务提供端地址有变化时候,注册中心会通知订阅者,更新

RegistryDirectory的
public synchronized void notify(List<URL> urls) 
->refreshInvoker->toInvokers
invoker = new InvokerDelegete<T>(protocol.refer(serviceType, url), url, providerUrl);
此时的url是从注册中心拿到的providerUrl,它的protocol为dubbo
所以会使用DubboProtocol的refer


3、DubboProtocol的refer,在这之前依然会有wrapper加上listener和filter
   DubboProtocol
   public <T> Invoker<T> refer(Class<T> serviceType, URL url) throws RpcException {
        // create rpc invoker.
        DubboInvoker<T> invoker = new DubboInvoker<T>(serviceType, url, getClients(url), invokers);
        invokers.add(invoker);
        return invoker;
    }

其中getClients会启动客户端连接服务端,getClients还会根据配置是否使用共享连接,还是每个服务都有一个连接

4、getClients->initClient->Exchangers.connect->Transporters.connect->Client
   最后就得到了NettyTransporter->NettyClient
   NettyClient的doOpen()就是netty客户端连接服务端过程。
   
5、回到RegistryProtocol的doRefer
   return cluster.join(directory);
   这个cluster集群方式,可选:failover/failfast/failsafe/failback/forking
   一般还会配置Mock
   那么将会得到MockClusterInvoker->FailoverClusterInvoker->Directory
   
6、得到invoker后在ReferenceConfig的createProxy最后
    // 创建服务代理,会对接口生成代理类,然后注册到spring容器中,使用时候获取到的就是代理类
    return (T) proxyFactory.getProxy(invoker);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值