zoukankan      html  css  js  c++  java
  • 配置加载流程

    配置加载流程

    应用启动阶段,Dubbo框架如何将所需要的配置采集(包括应用配置、注册中心配置、服务配置等),以完成服务的暴露和引用流程。

    根据驱动方式的不同(比如Spring或裸API编程)配置形式上肯定会有所差异,具体请参考XML配置、Annotation配置、API配置三篇文档。除了外围驱动方式上的差异,Dubbo的配置读取总体上遵循了以下几个原则:

    1. Dubbo 支持了多层级的配置,并按预定优先级自动实现配置间的覆盖,最终所有配置汇总到数据总线URL后驱动后续的服务暴露、引用等流程。
    2. ApplicationConfig、ServiceConfig、ReferenceConfig 可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式。
    3. 配置格式以 Properties 为主,在配置内容上遵循约定的 path-based 的命名规范

    配置来源

    首先,从Dubbo支持的配置来源说起,默认有四种配置来源:

    • JVM System Properties,-D 参数
    • Externalized Configuration,外部化配置
    • ServiceConfig、ReferenceConfig 等编程接口采集的配置
    • 本地配置文件 dubbo.properties

    覆盖关系

    下图展示了配置覆盖关系的优先级,从上到下优先级依次降低

    配置格式

    • 目前Dubbo支持的所有配置都是.properties格式的
    • 包括-DExternalized 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();
    }
    
    
    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    【洛谷 P5409】 【模板】—第一类斯特林数·列(多项式Ln+多项式快速幂)
    【洛谷 P5395】【模板】—第二类斯特林数·行(NTT)
    【洛谷 P5395】【模板】—第二类斯特林数·行(NTT)
    【洛谷 P5408】【模板】—第一类斯特林数·行(倍增+NTT)
    【洛谷 P5408】【模板】—第一类斯特林数·行(倍增+NTT)
    多测师讲解badboy_录制脚本工具安装001_高级讲师肖sir
    多测师讲解jmetera___启动方式—___高级讲师肖sir
    多测师讲解jmeter的——性能测试理论——高级讲师肖sir
    多测师讲解性能测试 _理论_(总结)高级讲师肖sir
    多测师面试讲解 _第三方测试点_高级讲师肖sir
  • 原文地址:https://www.cnblogs.com/YC-L/p/14914997.html
Copyright © 2011-2022 走看看