配置加载流程
配置加载流程#
应用启动阶段,Dubbo框架如何将所需要的配置采集(包括应用配置、注册中心配置、服务配置等),以完成服务的暴露和引用流程。
根据驱动方式的不同(比如Spring或裸API编程)配置形式上肯定会有所差异,具体请参考XML配置、Annotation配置、API配置三篇文档。除了外围驱动方式上的差异,Dubbo的配置读取总体上遵循了以下几个原则:
- Dubbo 支持了多层级的配置,并按预定优先级自动实现配置间的覆盖,最终所有配置汇总到数据总线URL后驱动后续的服务暴露、引用等流程。
- ApplicationConfig、ServiceConfig、ReferenceConfig 可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式。
- 配置格式以 Properties 为主,在配置内容上遵循约定的
path-based
的命名规范
配置来源#
首先,从Dubbo支持的配置来源说起,默认有四种配置来源:
- JVM System Properties,-D 参数
- Externalized Configuration,外部化配置
- ServiceConfig、ReferenceConfig 等编程接口采集的配置
- 本地配置文件 dubbo.properties
覆盖关系#
下图展示了配置覆盖关系的优先级,从上到下优先级依次降低
配置格式
#
- 目前Dubbo支持的所有配置都是
.properties
格式的 - 包括
-D
、Externalized Configuration
等 .properties
中的所有配置项遵循一种path-based
的配置格式:
# 应用级别 dubbo.{config-type}[.{config-id}].{config-item}={config-item-value} # 服务级别 dubbo.service.{interface-name}[.{method-name}].{config-item}={config-item-value} dubbo.reference.{interface-name}[.{method-name}].{config-item}={config-item-value} # 多配置项 dubbo.{config-type}s.{config-id}.{config-item}={config-item-value}
应用级别#
dubbo.application.name=demo-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.port=-1
服务级别
dubbo.service.org.apache.dubbo.samples.api.DemoService.timeout=5000
dubbo.reference.org.apache.dubbo.samples.api.DemoService.timeout=6000
dubbo.reference.org.apache.dubbo.samples.api.DemoService.sayHello.timeout=7000
多配置项
dubbo.registries.unit1.address=zookeeper://127.0.0.1:2181
dubbo.registries.unit2.address=zookeeper://127.0.0.1:2182
dubbo.protocols.dubbo.name=dubbo
dubbo.protocols.dubbo.port=20880
dubbo.protocols.hessian.name=hessian
dubbo.protocols.hessian.port=8089
扩展配置
dubbo.application.parameters.item1=value1
dubbo.application.parameters.item2=value2
dubbo.registry.parameters.item3=value3
dubbo.reference.org.apache.dubbo.samples.api.DemoService.parameters.item4=value4
几种编程配置方式#
接下来,我们看一下选择不同的开发方式时,对应到 ServiceConfig、ReferenceConfig 等编程接口采集的配置的变化
Sping XML
<!-- dubbo-provier.xml --> <dubbo:application name="demo-provider"/> <dubbo:config-center address="zookeeper://127.0.0.1:2181"/> <dubbo:registry address="zookeeper://127.0.0.1:2181" simplified="true"/> <dubbo:metadata-report address="redis://127.0.0.1:6379"/> <dubbo:protocol name="dubbo" port="20880"/> <bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/> <dubbo:service interface="org.apache.dubbo.samples.basic.api.DemoService" ref="demoService"/>
Spring Annotation
// AnnotationService服务实现 @Service public class AnnotationServiceImpl implements AnnotationService { @Override public String sayHello(String name) { System.out.println("async provider received: " + name); return "annotation: hello, " + name; } }
dubbo.properties
## dubbo.properties dubbo.application.name=annotation-provider dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.protocol.name=dubbo dubbo.protocol.port=20880
SpringBoot
## application.properties # Spring boot application spring.application.name=dubbo-externalized-configuration-provider-sample # Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service dubbo.scan.base-packages=com.alibaba.boot.dubbo.demo.provider.service # Dubbo Application ## The default value of dubbo.application.name is ${spring.application.name} ## dubbo.application.name=${spring.application.name} # Dubbo Protocol dubbo.protocol.name=dubbo dubbo.protocol.port=12345 ## Dubbo Registry dubbo.registry.address=N/A ## DemoService version demo.service.version=1.0.0
API
public static void main(String[] args) throws IOException { ServiceConfig<GreetingsService> service = new ServiceConfig<>(); service.setApplication(new ApplicationConfig("first-dubbo-provider")); service.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234")); service.setInterface(GreetingsService.class); service.setRef(new GreetingsServiceImpl()); service.export(); System.out.println("first-dubbo-provider is running."); System.in.read(); }
作者:BigBender
出处:https://www.cnblogs.com/BigBender/p/14914997.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!