一、背景
本文是基于dubbo3.0进行介绍,主要是介绍业务bean引用过程的主流程,所以并不会非常的具体,比如protocol进行refer操作时候与注册中心进行交互的过程就没有展开,后续作者在有时间的情况下,会对具体的细节进行详细的介绍,如果有哪里写的不对的地方,请留言指正进行交流
在进行主流程之前先要具备几个前提知识:
1、factorybean的用法需要提前了解
2、主流程是一种先缓存,后获取的处理方式
3、dubbo中的invoker是一个执行器对象,底层就是真正的与服务端的交互逻辑
二、主流程
1、第一步是创建invoker,spring容器启动之后发送event,dubbo listener监听启动dubbo容器,开始reference的初始化逻辑
还是dubbo标准的入口
接下来就是与注册中心交互生成invoker的核心逻辑,当然在这之前有区分本地or远程的逻辑,还有区分远程中是否直连的逻辑,本文中都没有展开
2、第二步创建proxy,proxy是对invoker进行了封装
缓存proxy,真正是缓存在了proxiesOfType中,并不是debug的那一行
3、第三步就是获取容器bean的逻辑,这个逻辑很经典,也是经常被问到的,获取bean,得到的却是proxy
这里的ReferenceBean就是实现了FactoryBean的对象,所以在getBean的时候就会触发getObject的方法
从缓存中获取proxy对象
到此可见,获取的是proxy对象
4、第四步就是proxy——>invoker——>访问服务端的逻辑,中间有很多的invoker的逻辑,比如mock逻辑,cluster容错逻辑,还有filter逻辑都不展开介绍了
最终调用到dubboinvoker,然后底层通过netty与服务方进行通信
三、总结
dubbo消费方的启动过程逻辑是比较清晰的,但是有几点是需要注意的
1、不同dubbo版本的细节处理逻辑有些许不同,需要区别学习,比如ReferenceConfigCache的逻辑,应该是新增加的cache功能;
2、如果要具体的了解启动的每个方面,还是有挺多需要了解的,比如非业务类的启动处理过程、底层通讯的逻辑、协议的设计、序列化的处理等等