ribbon源码(3) 配置模块
ribbon的很多功能可以通过配置进行调整,ribbon通过IClientConfig来获取配置信息,用户可以通过实现IClientConfig来管理配置。
ribbon也提供了默认的实现(DefaultClientConfigImpl),底层通过Archauis获取配置信息,如果没有配置信息,DefaultClientConfigImpl也为各个配置项设置了默认值。DefaultClientConfigImpl的配置项的格式为:<clientName>.<nameSpace>.<propertyName>,如果IClientConfig没有clientName,则对应格式为:<nameSpace>.<propertyName>。
配置模块的结构如下:
IClientConfig定义了获取配置的方法,ribbon使用IClientConfig来获取配置。DefaultClientConfigImpl是ribbon提供的IClientConfig的实现。
ClientConfigFactory是创建IClientConfig的工厂模式接口。子类DefaultClientConfigFactory创建DefaultClientConfigImpl。
IClientConfigKey为配置的key对象,本质上内部是一个string类型字段。IClientConfig也实现了builder模式,也可以通过builder方式进行初始化。
DefaultClientConfigImpl核心代码逻辑
public Object getProperty(IClientConfigKey key){ String propName = key.key(); Object value = getProperty(propName); return value; }
protected Object getProperty(String key) { if (enableDynamicProperties) { String dynamicValue = null; DynamicStringProperty dynamicProperty = dynamicProperties.get(key); if (dynamicProperty != null) { dynamicValue = dynamicProperty.get(); } if (dynamicValue == null) { dynamicValue = DynamicProperty.getInstance(getConfigKey(key)).getString(); if (dynamicValue == null) { dynamicValue = DynamicProperty.getInstance(getDefaultPropName(key)).getString(); } } if (dynamicValue != null) { return dynamicValue; } } return properties.get(key); }