五、Dubbo 启停原理解析

news2025/4/12 19:29:04

五、Dubbo 启停原理解析
5.1 配置解析
5.1.1 基于 schema 设计解析

  • Dubbo 配置约束文件在 dubbo-config/dubbo-config-spring/src/main/resources/dubbo.xsd 中,dubbo.xsd 文件用来约束使用 XML 配置时的标签和对应的属性

  • 在这里插入图片描述

  • 在这里插入图片描述

    • 5.1.2 基于 XML 配置原理解析
  • 主要解析逻辑入口是在 DubboNamespaceHandler类中完成,主要把不同的标签关联到解析实现类中。registerBeanDefinitionParser 方法约定了在Dubbo框架中遇到标签application、module和registry等都会委托给DubboBeanDefinitionParser处理

  • 如果dubbo:service配置了 class属性,那么为具体class 配置的类注册 Bean,并入 ref 属性。在解析过程中调用了 parseProperties方法,这个方法主要解析〈dubbo:service〉标签中的name、class和ref等属性。parseProperties方法会把key-value键值对提取出来放到BeanDefinition中,运行时Spring会自动处理注入值

  • 属性值解析时,如果属性是引用对象,则Dubbo默认会创建RuntimeBeanReference类型注入,运行时由Spring注入引用对象
    5.1.3 基于注解配置原理解析

  • 当Spring容器启动的时候,如果注解上面使用@Import,则会触发其注解方法selectimports,比如 EnableDubboConfig 注解中指定的 DubboConfigConfigurationSelector.class,会自动触发 DubboConfigConfigurationSelector#selectImports 方法

  • 如果业务方配置了 Spring 的@PropertySource 或 XML 等价的配置(比如配置了框架 dubbo.registry.address 和dubbo.application 等属性),则 Dubbo 框架会在 DubboConfigConfigurationSelectorttselectlmports中自动生成相应的配置承载对象

  • 服务注解扫描和注册

    • ①Dubbo框架首先会提取用户配置的扫描包名称,因为包名可能使用${…}占位符,因此框架会调用Spring的占位符解析做进一步解码
    • ②:开始真正的注解扫描,委托Spring对所有符合包名的.class文件做字节码分析,最终通过③配置扫描@Service注解作为过滤条件。在④中将仞Service标注的服务提升为不同的Bean,这里并没有设置beanClasso
    • ⑤中主要根据注册的普通Bean生成ServiceBean的占位符,用于后面的属性注入逻辑
    • ⑥中会提取普通Bean上标注的Service注解生成新的RootBeanDefinition,用于Spring启动后的服务暴露
  • 消费注解注入

    • 在①中主要利用这个扩展点查找服务引用的字段或方法
    • 在②中触发字段或反射方法值的注入,字段处理会调用findFieldReferenceMetadata方法
    • 在③中会遍历类所有字段,因为篇幅的原因,方法级别注入最终会调用findMethodReferenceMetadata方法处理上面的注解
    • 在②中会触发字段或方法inject方法,使用泛化调用的开发人员可能用过ReferenceConfig创建引用对象
      5.2 服务暴露的实现原理
      5.2.1 配置承载初始化
  • 默认覆盖策略

    • -D 传递给 JVM 参数优先级最高
    • 代码或XML配置优先级次高
    • 配置文件优先级最低

5.2.2 远程服务的暴露机制

  • 整体机制
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/877060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优维低代码实践:自定义模板

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…

threejs中gltf模型出现的问题(黑色,颜色不协调,太小)和解决方案

模型一片漆黑 如下图 可能原因,没有灯光,加下以下代码: // 4、加入灯光 const lightness new THREE.HemisphereLight(0xffffff, 0x444444); lightness.position.set(0, 20, 0); scene.add(lightness); const shadowLight new THREE.Direct…

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统 2023/8/14 17:19 win11系统无法跳过联网 https://www.xpwin7.com/jiaocheng/28499.html Win11开机联网跳过不了怎么办?Win11开机联网跳过不了解决方法 Win11开机联网跳过不了怎么办?Win11开机…

gearman使用心得

gearman基础 工作原理 部署架构 本质上,gearman可以认为是一个分布式任务队列,client是生产者,worker则是消费者。gearman并不主动分发任务,而是由worker到它那里去取任务执行,所以它采用的是类似kafka的pull消费模式…

【Unity每日一记】向量操作摄像机的移动(向量加减)

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

【JavaWeb】实训的长篇笔记(上)

JavaWeb的实训是学校的一门课程,老师先讲解一些基础知识,然后让我们自己开发一个比较简单的Web程序。可涉及的知识何其之多,不是实训课的 3 周时间可以讲得完的,只是快速带过。他说:重点是Web开发的流程。 我的实训草草…

c++虚继承(使用)

class A2:virtual public Grand 1.构造顺序按派生列表顺序,若有虚基类先构造虚基类,销毁顺序和构造顺序相反。 2.虚基类时,孙子C来初始化爷爷Grand。 附:thinking in c 2nd https://www.micc.unifi.it/bertini/download/progr…

【数据结构】 初识集合框架

文章目录 什么是集合框架集合框架的重要性开发中的使用笔试及面试题 数据结构是什么容器背后对应的数据结构相关java知识 什么是算法如何学好数据结构以及算法多画图多思考死磕代码多总结多刷题 总结 什么是集合框架 这里博主将简单介绍一下集合框架,想要详细了解的…

为什么需要知识图谱,如何构建它?

从关系数据库迁移到图形数据库的指南 跟随 发表于 迈向数据科学 7 分钟阅读 4天前 154 4 一、说明 TLDR:知识图谱在图数据库中组织事件、人员、资源和文档,以进行高级分析。本文将解释知识图谱的用途,并向您展示如何将关系数据模型转换为图…

【Sklearn】基于最中心分类器算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于最中心分类器算法的数据分类预测(Excel可直接替换数据) 1.模型原理2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果 1.模型原理 最近中心分类器(Nearest Centroid Classifier)也被称为近似最近邻…

SolidUI 一句话生成任何图形,v0.2.0功能介绍

文章目录 背景聊天窗口提示词 聊天窗口生成输入数据格式柱形图曲面图散点图螺旋线饼图兔子建模地图 设计页面页面布局预览 SolidUI社区的未来规划如何成为贡献者加群 背景 随着文本生成图像的语言模型兴起,SolidUI想帮人们快速构建可视化工具,可视化内容…

BFS(广度优先搜索) 的相关介绍解析

文章目录 DFS 和 BFSBFS 的应用一:层序遍历BFS 的应用二:最短路径最短路径例题讲解 DFS(深度优先搜索)和 BFS(广度优先搜索)就像孪生兄弟,提到一个总是想起另一个。然而在实际使用中&#xff0c…

Keburnetes 存储卷 volumes

K8S 的 存储卷 volumes emptyDir 可实现Pod中的容器之间共享目录数据,但emptyDir存储卷没有持久化数据的能力,存储卷会随着Pod生命周期结束而一起删除 (一个pod中创建了docker1 docker2两个容器,他们都挂载这个emptyDir&#xff0…

第1期:《实体新零售--瑞幸咖啡》私域爆款案列拆解

朋友们,大家好,阿车写私域相关的内容也有一段时间了,前前后后也接触了不少“私域玩法” “爆款案列”,只是一直不知道怎么分享给大家,前段时间这个分享的想法愈发激烈,所以抽时间好好梳理了一番&#xff0c…

如何初始化Git仓库

如何将目录初始化为Git仓库 一级目录二级目录三级目录 一、准备1、安装 gh2、登录 二、初始化 Git 仓库 一级目录 二级目录 三级目录 一、准备 ​ 在这里,我们需要借助一个非常好用的工具,大家也可以参照官方文档进行阅读,下面介绍常用的…

Java Review - 关于代理的二三事儿

文章目录 Pre概述静态代理概述Code 动态代理概述实现方式一 - JDK代理或接口代理概述Code 实现方式二 - CGLib 子类代理 (Code Generation Library)概述pom依赖Code Pre Java-JDK动态代理 Java-CGLib动态代理 概述 代理模式是一种结构型设计模式,其目的是为其他对…

Windows安装MinGW和简单的使用教程

Windows安装MinGW和简单的使用教程 什么是MinGW? MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要…

在P4(Perforce)中使用TortoiseMerge来比较合并

一直习惯于svn的比较合并工具,会觉得p4自带的反人性。还好p4可以在设置里替换成外部的比较合并工具。方法见下图: 1. 比较 2. 合并 注意,如果合并设置有问题(某些P4版本),则需要通过一个bat文件来做中转&a…

聊聊看React和Vue的区别

Vue 更适合小项目,React 更适合大公司大项目; Vue 的学习成本较低,很容易上手,但项目质量不能保证...... 真的是这样吗?借助本篇文章,我们来从一些方面的比较来客观的去看这个问题。 论文档的丰富性 从两个…

Linux fork()||fork()问题

以下代码会输出几个"A"? int main() { fork() || fork();printf("A\n");} 代码分析: //父进程fork() || fork();printf("A\n");这里父进程中的第一个fork先执行,产生一个子进程: //子进程…