Dubbo 消费者启动流程
来源:互联网 发布:中国崩溃论 知乎 编辑:程序博客网 时间:2024/06/12 01:38
ReferenceConfig#createProxy 创建代理
refprotocol#refer 返回invoker
refprotocol为Protocol$Adpative,是动态生成的,参考http://blog.csdn.net/u011686226/article/details/53786481
com.alibaba.dubbo.rpc.Protocol extension = (com.alibaba.dubbo.rpc.Protocol)ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.Protocol.class).getExtension(extName); return extension.refer(arg0, arg1);
因此实际上又获取了一个protocol,然后调用它的refer方法,这个protocol是ProtocolListenerWrapper
简单说一下这里ExtensionLoader#getExtension 参数是registry,首先从cachedInstances缓存获取,没有使用createExtension创建
createExtension方法也会从EXTENSION_INSTANCES缓存中获取,没有的话会实例化一个(这里实力化了一个RegistryProtocol)
然后调用injectExtension方法进行依赖注入
然后使用cachedWrapperClasses包装,这里cachedWrapperClasses有两个
ProtocolListenerWrapper#refer
public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {if (Constants.REGISTRY_PROTOCOL.equals(url.getProtocol())) {return protocol.refer(type, url);}return new ListenerInvokerWrapper<T>(protocol.refer(type, url),Collections.unmodifiableList(ExtensionLoader.getExtensionLoader(InvokerListener.class).getActivateExtension(url, Constants.INVOKER_LISTENER_KEY)));}
实际上又调用了ProtocolFilterWrapper#refer
public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {if (Constants.REGISTRY_PROTOCOL.equals(url.getProtocol())) {return protocol.refer(type, url);}return buildInvokerChain(protocol.refer(type, url), Constants.REFERENCE_FILTER_KEY, Constants.CONSUMER);}
又调用了RegistryProtocol#refer
这里创建了一个RegistryDirectory subscribe开始订阅服务,实际上还是使用了ZooKeeperRegistry注册。
请求过程
InvokerInvocationHandler#invoke方法
MockClusterInvoker#invoke方法
AbstractClusterInvoker#invoke方法 这里会获取负载均衡类loadbalance
根据配置例如FailoverClusterInvoker#doInvoke方法 这里会做负载均衡
RegistryDirectory的静态内部类InvokerDelegete#invoke 这里是个拦截器链 是在ProtocolFilterWrapper类的buildInvokerChain方法创建的
我这里经过了几个filter 最后到达了DubboInvoker(dubbo协议)
服务端将结果发送client后,clientsocket连接上监听线程,获取id,再从concurrenthashmap找到object,并且将结果存在callback里面,监听线程获取callback的锁,会notifyall(),继续执行
- Dubbo 消费者启动流程
- Dubbo 消费者配置及启动(二)
- Dubbo 服务提供者启动成功后,消费者调用服务失败
- Dubbo Provider启动流程源码分析
- Dubbo消费者配置
- Dubbo 接口 、提供者、消费者
- dubbo管控台不显示消费者
- dubbo 服务消费者初始化
- dubbo中消费者配置文件
- Dubbo+Zookeeper 一个消费者对多个生产者的配置流程
- dubbo起步搭建Spring+SpringMVC+dubbo的开发环境(4,提供者 消费者工程启动调试)重要
- dubbo启动消费者报错:No provider available for the service
- 用maven创建dubbo消费者
- Dubbo消费者代理的创建
- dubbo学习-启动dubbo控制台dubbo-admin
- Dubbo开发流程
- dubbo registry 基本流程
- dubbo 简单搭建流程
- IBM Aix系统
- sublime 文件路径提示功能(安装方法)
- es6扩展运算符 三个点(...)
- Linux中IIC设备驱动再细读
- Oracl提示“记录被另一个用户锁住” 解决方法
- Dubbo 消费者启动流程
- 开发笔记---软键盘遮挡输入框和导航栏遮挡了内容的解决方案
- 欢迎使用CSDN-markdown编辑器
- MFC关于JPG图片显示处理方面记录
- Angualr中的ng-class
- 算法提高 不同单词个数统计
- DSO示波器的带宽和采样率
- javascript===和==,xml中<></>和</>区别
- javascript中的var,let和const