Dubbo 配置的加载流程

配置加载流程

在SpringBoot应用启动阶段,Dubbo的读取配置遵循以下原则

  1. Dubbo支持了多层级的配置,按照预先定义的优先级自动实现配置之间的覆盖,最终所有的配置汇总到数据总线URL后,驱动后续的服务暴露、引用等流程。
  2. ApplicationConfig、ServiceConfig、ReferenceConfig可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式。
  3. 配置的格式以properties为主。

配置来源

  • JVM系统属性,-D参数
  • 外部化配置
  • ServiceConfig、ReferenceConfig等编程接口采集的配置
  • 本地配置文件 dubbo.properties

覆盖关系

JVM参数配置 > 外部配置 > Spring/API配置 > 本地配置文件
在这里插入图片描述

JVM参数配置-Ddubbo.protocol.port=20881

在这里插入图片描述

在这里插入图片描述

配置格式

目前Dubbo支持的所有配置都是.properties格式的,包括-D、Externalized Configuration等,.properties中的所有配置项遵循一种path-based的配置格式:

  • 应用级别

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

配置方式

Spring中采用XML格式配置
例如

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!--指定提供当前服务的名字-->
    <dubbo:application name="dubbo-provider"></dubbo:application>

    <!--指定注册中心-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>

    <!--指定通信规则-->
    <dubbo:protocol name="dubbo" port="-1"></dubbo:protocol>

    <bean id="userAddressImpl" class="cn.edu.nyist.provider.serviceImpl.UserAddressImpl"/>

    <!--暴露服务的接口 ref指向实现的对象-->
    <dubbo:service interface="cn.edu.nyist.service.UserAddressService" ref="userAddressImpl"></dubbo:service>

    <!--自动选取监控中心-->
    <dubbo:monitor protocol="registry"></dubbo:monitor>
</beans>

Spring也可采用注解配置

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;


@Service
@Component
public class UserAddressImpl implements UserAddressService {
    @Override
    public List<UserAddress> getUserAddressList(String userId) {
        UserAddress userAddress1 = new UserAddress(userId, "小王", "花果山水帘洞11号", "12456657");
        UserAddress userAddress2 = new UserAddress(userId, "小王", "盘丝洞12号", "666666");
        return Arrays.asList(userAddress1, userAddress2);
    }
}

SpringBoot中的application配置

dubbo.application.name=dubbo-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
dubbo.monitor.protocol=registry

原文地址:https://www.cnblogs.com/itjiangpo/p/14181373.html