介绍
Config是一个分布式配置管理系统,它提供了一个中心化的配置服务器来管理应用程序的配置信息。它允许开发人员将应用程序的配置信息存储在一个集中的位置,并将这些配置信息分发给多个应用程序实例。Config支持多种后端存储,包括数据库、本地文件系统等。它还提供了一组REST API,可以用于动态获取配置信息,以便应用程序能够及时更新自己的配置。通过使用Config,开发人员可以轻松地管理和更新应用程序的配置信息,从而提高应用程序的可维护性和可扩展性。
Config Client用于操作存储在Config Server中的配置内容。
特性
- 🚀 可配置指向多个服务端。
- 🚀 配置文件支持yaml和properties格式。
- 🚀 客户端从服务端拉取配置可开启安全校验。
- 🚀 可设置拉取配置失败或拉取配置信息为空时,服务启动失败。
- 🚀 可设置拉取配置失败重试次数和重试间隔。
- 🚀 配置信息可开启定时刷新。
- 🚀 可设置请求读取超时阈值。
- 🚀 配置信息缓存读写分离。
- 🚀 兼容Spring Cloud Config Server。
架构图

源码目录
arduino
.
├── README.md
├── module.json
├── resources
│ └── config_center
│ ├── application.json
│ └── application.yml
└── src
├── config_client
│ ├── client_run
│ │ └── client.cj
│ ├── common
│ │ ├── config_utils
│ │ │ ├── log_utils.cj
│ │ │ ├── read_profiles.cj
│ │ │ ├── retry_utils.cj
│ │ │ └── yaml_to_proerties.cj
│ │ └── model
│ │ ├── config_content.cj
│ │ ├── config_properties.cj
│ │ └── environment.cj
│ ├── initialization
│ │ ├── profiles_initialization.cj
│ │ └── property_sourceLocator.cj
│ └── slog
│ └── slog.cj
└── config_client_test
├── client_test.cj
├── profiles_initialization_test.cj
└── property_sourceLocator_test.cj
doc
存放库的设计文档、提案、库的使用文档、LLT 覆盖率报告resources/config_client
config_center的配置文件示例src/config_client
存放config核心代码src/config_client_test
存放测试用例,包括 HLT 用例、LLT 用例和 UT 用例
DD一下: 欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。
erlang
`欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
接口说明
cj
package config_client.common.model
/**
* ConfigClient配置信息缓存
*/
public open class AppContext {
/**
* 缓存中添加配置项
*/
public static func set(key: String, value: String): Option
/**
* 通过配置项的键从缓存中获取配置项值
*/
public static func get(key: String): Option
/**
* 获取所有配置项信息
*/
public static func getContext(): HashMap
/**
* 设置本地基础配置信息
*/
public static func setConfigProperties(configProperties: ConfigProperties): Unit
/**
* 获取本地基础配置信息
*/
public static func getConfigProperties(): ConfigProperties
}
使用说明
编译
cj
cjpm build
配置
在自己项目目录下中的resources/config_center添加application.json或application.yml
cj
{
"config": {
"server": {
"url": "http://127.0.0.1:8080",
"security": {
"username": "admin",
"password": "admin"
}
},
"profile": "dev",
"label": "master",
"client": {
"retry": {
"max-auto-retries": 5,
"interval": 15
},
"refresh": {
"interval": 30
},
"request": {
"read-timeout": 2000
}
}
},
"application": {
"name": "client"
}
}
cj
application:
name: client # 服务名
config:
server:
url: 'http://127.0.0.1:8081' # 服务端Url 可配置多个服务端地址,用","分割
security: # 安全校验
username: admin # 安全校验用户名
password: admin # 安全校验密码
profile: dev # 配置文件定位
label: master
client:
fail-fast: false # 启动快速失败 拉取配置失败或拉取配置信息为空时,服务启动失败
retry: # 重试策略
max-auto-retries: 5 # 最大重试次数 -1表示不重试
interval: 15 # 重试间隔 默认为10 单位: 秒
refresh: # 刷新
interval: 30 # 定时刷新间隔 单位: 秒 -1表示不刷新
request: # 请求
read-timeout: 2000 # 请求读取超时阈值 默认为15000 单位: 毫秒
功能示例
引入ConfigClient
在自己项目main方法中导入config_client.client_run包便可开启ConfigClient功能
cj
from config_client import config_client.client_run.*
from config_client import config_client.common.model.AppContext
main() {
println("Configuration File Content is " + AppContext.getContext().toString());
println("user.username=" + AppContext.getContext().get("user.username").getOrThrow());
println("user.password=" + AppContext.getContext().get("user.password").getOrThrow());
}
控制台打印出从服务端获取的配置信息
cj
Configuration File Content is [(user.username, dev), (user.password, 123)]
user.username=dev
user.password=123
配置文件对应关系
config客户端通过调用服务端提供的/{application}/{profile}[/{label}]接口,获取配置信息。
cj
application:
name: client # 服务名
config:
profile: dev # 配置文件定位
label: master
为配置服务器指定多个URL
当你部署了多个配置服务器实例,并且预计一个或多个实例会时常不可用或无法满足请求时,为了确保高可用性,你可以指定多个URL(在 config.server.uri 属性下以逗号分隔的列表形式)。配置客户端将尝试从每个URL获取属性,直到尝试成功。
例如:
cj
config:
server:
url: 'http://192.168.10.101:8081,http://192.168.10.102:8081'
客户端首先从http://192.168.10.101:8081拉取配置,拉取成功,项目启动成功。拉取失败,尝试从http://192.168.10.102:8081拉取配置。
启动快速失败
在某些情况下,如果服务不能连接到配置服务器,你可能想让它启动失败。如果这是需要的行为,请配置开启启动快速失败。
cj
client:
fail-fast: true
默认为关闭状态,也就是客户端没有成功拉取配置信息,也能正常启动。
安全校验
当config服务端开启安全校验后,客户端需要配置相同的校验信息,否则无法拉取配置信息。
cj
config:
server:
security:
username: admin
password: admin
失败重试
如果你预计配置服务器在你的应用程序启动时可能偶尔不可用,你可以让它在失败后继续尝试。
cj
config:
client:
retry: # 重试策略
max-auto-retries: 5 # 最大重试次数 -1表示不重试
interval: 15 # 重试间隔 默认为10 单位: 秒
在配置多个服务端地址时,每个地址会多次请求,失败会继续请求下一个地址。
定时刷新
如果客户端在运行时,需要修改配置信息,可以开启定时刷新功能。在服务端存储的配置信息修改后,客户端会更新到最新的配置。
cj
config:
client:
refresh: # 刷新
interval: 30 # 定时刷新间隔 单位: 秒 -1表示不刷新