【仓颉三方库】分布式——config-client

介绍

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表示不刷新
相关推荐
nashane2 小时前
HarmonyOS 6学习:CapsLock键失效诊断与长截图完整实现指南
学习·华为·harmonyos
richard_yuu4 小时前
鸿蒙心理测评模块实战|PHQ-9/GAD7双量表答题、实时计分与结果本地化存储
华为·harmonyos
不爱吃糖的程序媛7 小时前
2026年Electron 鸿蒙PC环境搭建指南
人工智能·华为·harmonyos
nashane7 小时前
HarmonyOS 6学习:长截图功能开发中的滚动拼接与权限处理实战
人工智能·华为·harmonyos
大师兄66688 小时前
从零开发一个 HarmonyOS 输入法——KikaInputMethod 完整拆解
harmonyos·服务卡片·harmonyos6·formkit
Python私教14 小时前
鸿蒙 NEXT 也能接 MCP?用 ArkTS 跑通 AI Agent 工具链
人工智能·华为·harmonyos
Swift社区16 小时前
分布式能力在鸿蒙 PC 上到底怎么用?
分布式·华为·harmonyos
nashane1 天前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
aqi001 天前
一文理清 HarmonyOS 6.0.2 涵盖的十个升级点
android·华为·harmonyos·鸿蒙·harmony