Dubbo学习笔记——方法调用流程

实际生成对象是指定接口的代理对象,其中InvokerInvocationHandler作为代理对象实质逻辑

调用代理对象的方法,实质上是调用InvokerInvocationHandler.invoke方法,排除掉Object原生方法,属于接口的方法使用invoker调用

 

MockClusterInvoker默认调用器

先从RegistryDirectory中获取方法参数mock,默认取false,若为true强制模拟调用;最后嵌套Invoker调用

调用list方法根据调用方法名从registryDirectory中获取invoker列表,采用负载均衡(默认随机选择)选取invoker进行调用

 

RegistryDirectory针对于某一接口而言的,其中存放methodInvokerMap,对所有方法的invoker以方法名为键缓存

 

若forbidden标志为真,表示该接口不可用,不存在提供者;forbidden标志在如下位置发生改变

 

接下来是ProtocolFilterWrapper构成公共协议调用,在初始化时通过url构成层级调用invoker链,调用链的末端是ProtocaolFilterWrapper.buildInvokerChain方法入参,往前追溯,这个入参何处得来?

 

 

可以看到,是由ReferenceConfig.refer方法中调用ProtocolFilterWrapper.refer得来,其中调用了protocol.refer(type,url)

 

这个protol根据协议配置不同而有所不同,这里DubboProtocol,其初始化的是DubboInvoker

 

 

 

posted @ 2018-01-08 00:38  flushest  阅读(1309)  评论(0编辑  收藏  举报