Dubbo 配置的加载流程
配置加载流程
在SpringBoot应用启动阶段,Dubbo的读取配置遵循以下原则
- Dubbo支持了多层级的配置,按照预先定义的优先级自动实现配置之间的覆盖,最终所有的配置汇总到数据总线URL后,驱动后续的服务暴露、引用等流程。
- ApplicationConfig、ServiceConfig、ReferenceConfig可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式。
- 配置的格式以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