Dubbo(十)之配置加载流程
生活随笔
收集整理的這篇文章主要介紹了
Dubbo(十)之配置加载流程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自??Dubbo配置加載流程
Dubbo 中的配置加載流程介紹
此篇文檔主要講在應用啟動階段,Dubbo框架如何將所需要的配置采集起來(包括應用配置、注冊中心配置、服務配置等),以完成服務的暴露和引用流程。
根據驅動方式的不同(比如Spring或裸API編程)配置形式上肯定會有所差異,具體請參考XML配置、Annotation配置、API配置三篇文檔。除了外圍驅動方式上的差異,Dubbo的配置讀取總體上遵循了以下幾個原則:
配置來源
首先,從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:2182dubbo.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 等編程接口采集的配置的變化。
Spring 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服務實現@Servicepublic class AnnotationServiceImpl implements AnnotationService {@Overridepublic String sayHello(String name) {System.out.println("async provider received: " + name);return "annotation: hello, " + name;}} ## dubbo.propertiesdubbo.application.name=annotation-providerdubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.protocol.name=dubbodubbo.protocol.port=20880Spring Boot
參見示例
## application.properties# Spring boot applicationspring.application.name=dubbo-externalized-configuration-provider-sample# Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Servicedubbo.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 Protocoldubbo.protocol.name=dubbodubbo.protocol.port=12345## Dubbo Registrydubbo.registry.address=N/A## DemoService versiondemo.service.version=1.0.0API
參考示例
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(); }總結
以上是生活随笔為你收集整理的Dubbo(十)之配置加载流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot使用日志
- 下一篇: Dubbo(九)之注解配置