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