【仓颉三方库】分布式——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表示不刷新
相关推荐
脑极体1 小时前
开源鸿蒙,给机器人带来了什么?
华为·机器人·开源·harmonyos
HarmonyOS_SDK3 小时前
意图框架事件推荐方案,精准匹配用户需求
harmonyos
Tolitres3 小时前
「鸿蒙 NEXT」基于 taskpool 实现自定义 Timer 工具类
harmonyos
城中的雾4 小时前
一键多环境构建——用 Hvigor 玩转 HarmonyOS Next
harmonyos
咸鱼过江4 小时前
openharmony5.0.0中C++公共基础类测试-线程相关(一)
c++·harmonyos
我爱鸿蒙开发5 小时前
🥇聊聊鸿蒙的一端开发,多端部署。
前端·开源·harmonyos
智驾8 小时前
HarmonyOS 是 Android 套壳嘛?
android·harmonyos·替代·套壳
悬空八只脚9 小时前
React-Native开发鸿蒙NEXT-svg绘制睡眠质量图part2
harmonyos
鸿蒙开发工程师—阿辉10 小时前
HarmonyOS Next 编译之如何使用多目标产物不同包名应用
华为·harmonyos