Dubbo隐式传参与SPI机制解析
需积分: 18 185 浏览量
更新于2024-08-18
收藏 1.65MB PPT 举报
"本文介绍了Dubbo框架中的隐式传参机制以及Dubbo的基本原理,特别是其基于SPI(Service Provider Interface)的扩展机制。"
在Dubbo框架中,隐式传参是一种方便服务提供者和服务消费者之间传递额外信息的方式。通过客户端调用`RpcContext.getContext().setAttachment()`方法设置键值对,这些参数会在远程调用过程中被自动携带到服务器端。服务提供方可以使用`RpcContext.getContext().getAttachments();`来获取这些附加参数,类似于HTTP请求中的Cookie。需要注意的是,`setAttachment`设置的键值对只存在于一次远程调用中,每次新的调用都需要重新设置。
Dubbo的基本原理之一是SPI机制,这是一种用于动态发现服务实现的机制。按照Java SPI的约定,服务提供者在对应的jar包`META-INF/services/`目录下创建一个与服务接口同名的文件,文件内容包含实现类的全限定名。当系统运行时,`java.util.ServiceLoader`工具类会根据这个文件加载并实例化相应的实现类,实现服务的自动装配,而无需在代码中硬编码实现类的信息。
Dubbo在其微内核设计中进一步扩展了SPI机制。它通过`@SPI`注解标记需要扩展的接口,例如`ThreadPool`接口,它有一个默认的实现策略,可以通过`@Adaptive`注解进行适配器模式的动态绑定。Dubbo维护了一个全局的`EXTENSION_LOADERS`映射,存储了所有扩展接口的`ExtensionLoader`实例,以便快速获取和加载扩展点实现。
Dubbo会从多个文件路径(如`META-INF/dubbo/internal`、`META-INF/dubbo`和`META-INF/services`)中查找扩展点实现。`loadExtensionClasses`方法会遍历这些路径,读取文件内容并解析成键值对,以加载对应的扩展实现。比如,Dubbo的线程池实现包括`fixed`(固定大小线程池)、`cached`(缓存线程池)和`limited`(可伸缩线程池)等,这些都是通过SPI机制加载和使用的。
Dubbo的隐式传参和SPI机制增强了服务之间的通信能力和框架的灵活性,使得开发者能够更便捷地扩展和定制服务行为。
2023-05-25 上传
2021-09-29 上传
2018-04-26 上传
2018-07-04 上传
2019-07-10 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
劳劳拉
- 粉丝: 21
- 资源: 2万+
最新资源
- d3-Scatterplot-Graph-fcc:FreeCodeCamp d3散点图
- CG引擎:一个随机的家伙,很开心创建c ++ OpenGl游戏引擎
- Linux shell脚本.rar
- UltrasonicDistanceMeasurementSystem:超声波测距,报警,LCD1602显示数据,温度校正超声波速度
- Excel模板基础体温记录表excel版.zip
- Advanced-Factorization-of-Machine-Systems:GSOC 2017-Apache组织-#使用并行随机梯度下降(python和scala)在Spark上实现分解机器
- operating_system_concept_os
- dosxnt文件-DOS其他资源
- Smart-Device:对于htmlacademy
- static-form-lambda:无服务器模板,创建一个FaaS AWS Lambda来处理表单提交
- Python库 | python-jose-0.6.1.tar.gz
- :scissors: React-Native 组件可在您想要的任何地方切割触摸Kong。 教程叠加的完美解决方案
- ocr
- react-pwa:使用creat js的示例渐进式Web应用程序
- VBiosFinder:从(几乎)任何BIOS更新中提取嵌入式VBIOS
- Python库 | python-hpilo-2.4.tar.gz