首先分享之前的所有文章 , 欢迎点赞收藏转发三连下次一定 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164…
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca…
一 .前言
前面几篇看了 Dobbo 的注册流程 , 这一阶段看看Dubbo 的发现流程
Dubbo 的发现包括以下几个环节 :
- Reference 的扫描和代理
- Reference 服务发现
- 负载均衡
- 服务降级
二 . Reference 获取
访问入口
1 | java复制代码public DubboBootstrap start() { |
2.1 初始化逻辑
1 | java复制代码private void referServices() { |
2.2 References 管理
列表获取
1 | java复制代码// 2.1 里面可以看到从缓存中获取 , 以下看一下获取的流程 |
看到这里基本上就能回忆起来了 , 上文这个地方就已经见过了, 其主要原理是获取 Config 前缀 ,然后从一个集合中获取对应的配置信息 :
1 | java复制代码public static String getTagName(Class<?> cls) { |
再来看一下那个图 :
三 . 扫描生成 Reference
3.1 扫描的入口
接下来看看Reference 是怎么扫描生成的 , 和上文看到的一样 , 一切的起点是 InitializingBean # afterPropertiesSet 触发的
1 | java复制代码C- ReferenceBean |
3.2 RefenceBean 管理入口
下面来看一下 Reference 的只要流程
1 | java复制代码public void addReference(ReferenceBean referenceBean) throws Exception { |
3.3 RefenceBean 初始化
1 | java复制代码private synchronized void initReferenceBean(ReferenceBean referenceBean) throws Exception { |
3.4 添加到集合中
1 | java复制代码// C- DubboBootstrap |
核心添加流程
1 | JAVA复制代码// PS : 中秋耶看过这个逻辑 , 获取集合并且添加 |
3.5 ReferenceBeanManager 补充
ReferenceBeanManager 属性
1 | java复制代码// 注意 , 这里实现了 ApplicationContextAware , 以完成容器的通知操作 |
补充
3.3 创建 ReferenceConfig 流程
1 | java复制代码 |
整体流程图
ReferenceConfig 数据
1 | java复制代码<dubbo:reference id="demoService" /> |
总结
Reference 比较有看头的就是 Spring 的深入使用 , 这个点值得深入学习一下
本文转载自: 掘金