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);
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);
相关文章推荐
- 【知识库】--Dubbo ReferenceBean获取-- 调用RegistryDirectory.notify -- 源码过程(254)
- Linux Socket CAN驱动 <5.控制器的初始化过程>
- Tomcat Jdbc数据源初始化过程以及错误Cannot resolve reference to bean 'dataSource' while setting bean property 'da
- Linux Socket CAN驱动 <5.控制器的初始化过程>
- 【知识库】--Dubbo ReferenceBean获取 -- router路由服务 源码过程(255)
- Spring注解配置初始化对象(<bean>)
- Dubbo中消费者初始化过程解析
- 【知识库】--Dubbo ReferenceBean获取-- RegistryProtocol.Refer -- 源码过程(254)
- 【知识库】--Dubbo ReferenceBean获取 -- 源码过程(254)
- Bean都初始化完成后,实现ApplicationListener<ContextRefreshedEvent>接口
- .net 4.0新特性-延迟初始化:Lazy(转),ThreadLocal<T>
- <转载自刘佳ID:freedom0203和waret> C++中成员初始化列表的使用
- .Net 4.0 延迟初始化:Lazy<T>
- &lt;转载自刘佳ID:freedom0203和waret&gt; C++中成员初始化列表的使用
- 生产者消费者线程在Queue<T>中实现多线程同步
- Spring中Bean的初始化过程
- Spring中ApplicationContextAware接口用法-->解决AppicationContext.getBean('xxxx')时初始化多次数据库连接池问题
- 小教训:<<const必须在定义时同时被初始化>>
- spring中bean初始化过程
- \include\wspiapi.h(45) : error C2265: '<Unknown>' : reference to a zero-siz