dubbo客户端(consumer层)大概调用过程

dubbo版本:2.6.1

dubbo客户端硬编码方式的实现:最终通过referenceConfig的get方法完成消息的订阅.

dubbo客户端(consumer层)大概调用过程_第1张图片

get方法中调用init()方法:

在init()方法中完成了参数的赋值和一些校验,接着调用:

ref = createProxy(map);

如果客户端传递的url(代表着前面各种参数的集合)只有一个,则调用:

invoker = refprotocol.refer(interfaceClass, urls.get(0));

如果url有多个,即多个注册中心,则循环加入invoker的集合.

根据前台的url解析出最终要调用的protocol,当然和服务端一样,也需要经过

protocolListenerWrapper->protocolFilterWrapper->RegistryProtocol完成与通信模块以及注册中心的调用,最后走到自己在一开始定义的dubboProtocol:

Invoker<T> refer(Class<T> serviceType, URL url)

在registry模块,默认使用的是failBackRegistry,在一个注册中心调用失败的时候会自动寻找下一个.

最后一步就是需要根据返回的invoker实例获取到proxy:

也就是说根据JavassistProxyFactory返回的proxy实例就相当于最后客户端得到的ref.

整体流程思路:

 dubbo客户端(consumer层)大概调用过程_第2张图片


在了解过服务端后,客户端理解起来也会简单容易,这里没有多分析内部的代码实现,给个简单的流程思路,在自己跟代码跑的时候就可以清晰一点了. 


你可能感兴趣的:(日常学习)