之前分析Dubbo架构分析的一篇,从dubbo官网摘录下了,服务消费者的时序分析图。
这篇文章还是从代码层面来分析消费者启动顺序。
首先,获取引用的变量,如果没有初始化,则调用init方法。
下面在看下 init方法的里面是初始化的过程。
通过调用Class.forName的加载类到jvm。
将一个类中的版本和方法, 存储在一个HashMap中。
最后,最重要的一点是createProxy这个方法,是创建动态代理, 然后创建ConsumerModel,其实是ref的装饰器,然后用ApplicationMode初始化消费者。
然后调用RegisterProtocal的Refer方法,如果是RegisterService则直接包装成Invoker返回, 然后是多个的,则调用doRefuer方法,使用Cluster去处理。
然后调用RegisterDirectory的subcribe,去订阅zookeeper的目录,然后使用cluster的join方法封装成Invoker,注册到ProvierConsumerRegTable中。
接着调用 Transporter的connect函数, 最终会调用ProxyFactory的createProxy创建动态代理类。
总结:
最近在看dubbo启动过程还是有点懵,对于它的整体架构和流程还是比较肤浅的,欢迎大家一起交流。