您的位置:首页 > Web前端

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

2017-07-03 18:16 309 查看
四、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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: