6.6 KiB
6.6 KiB
AgileConfig 配置管理功能需求文档
一、功能概述
在后台管理系统中新增一个业务项目配置管理页面,用于管理业务项目的配置项。配置项通过 AgileConfig Restful API 推送到 AgileConfig 配置中心,业务项目从 AgileConfig 读取配置,无需查询数据库。
二、功能定位
- 本项目角色:配置管理工具,提供配置界面
- 本项目自身配置:继续使用现有方式(appsettings.json、sys_config 表),不使用 AgileConfig
- 业务项目:从 AgileConfig 配置中心读取配置
三、功能需求
3.1 配置页面设计
3.1.1 页面形式
- 不是传统的配置列表管理页面(增删改查)
- 是一个表单配置页面
- 每个配置项对应一个表单字段
3.1.2 UI
- 上传按钮:用于文件/图片上传(如:帖子精华图片),建议先了解对应的上传功能
- 开关:用于布尔值配置(如:是否启用过滤词)
- 文本框:用于文本/数字输入(如:图片压缩率)
- 下拉框:用于选择数据字典,参考其它表单页面的数据字段选项
- 其他特俗字段:根据配置项来处理
3.1.3 页面布局
- 配置项按分组展示
- 每个分组可以折叠/展开
- 页面底部有保存按钮
- 点击保存后,将所有修改的配置项推送到 AgileConfig
3.2 配置项分组
3.2.1 分组展示
- 配置项需要按分组展示(如:帖子配置、图片配置、过滤配置等)
- 分组信息从配置项 JSON 定义中读取
3.3 配置管理逻辑
3.3.1 配置读取
- 页面加载时,从 AgileConfig 读取当前 App 的所有json配置项
- 将json填充到表单中
3.3.2 配置保存
- 用户修改配置项后,点击保存按钮
- 只更新修改的配置项(增量更新,不是全量覆盖)
- 通过 AgileConfig Restful API 推送配置变更
- 保存成功后提示用户
3.4 AgileConfig 连接配置
3.4.1 配置来源
- AgileConfig 连接信息从
appsettings.json读取 - 配置项如下:
{
"AgileConfig": {
"appId": "CloudGaming",
"secret": "95BB717C61D1ECB0E9FB82C932CC77FF",
"nodes": "http://124.220.55.158:94",
"url": "http://124.220.55.158:94",
"env": "PROD",
"UserName": "admin",
"Password": "dbt@com@1234"
}
}
3.4.2 配置说明
- appId:要管理的 AgileConfig 应用 ID(App 已存在,不需要创建)
- url:AgileConfig 服务器地址
- nodes:多个节点使用逗号分隔
- env:环境(PROD/DEV/TEST 等)
- UserName:AgileConfig API 认证用户名
- Password:AgileConfig API 认证密码
四、技术实现要点
4.1 AgileConfig API 集成
4.1.1 认证方式
- 使用 Basic 认证
- 请求头:
Authorization: Basic base64(UserName:Password) - Content-Type:
application/json
4.1.2 需要使用的 API
- 查询配置项列表:GET
/api/config/app/{appId}?env={env} - 添加/更新配置项:POST/PUT
/api/config - 删除配置项:DELETE
/api/config/{id} - 发布配置:POST
/api/config/publish/{appId}?env={env}
4.1.3 API 调用封装
- 创建
AgileConfigService封装 API 调用 - 统一处理认证、错误处理、重试逻辑
- 项目创建专用 HTTP 客户端
4.2 后端实现
4.2.1 Controller
- 创建
AgileConfigController或类似名称 - 提供接口:
GET /agileconfig/configs- 获取配置项列表POST /agileconfig/save- 保存配置项(增量更新)GET /agileconfig/groups- 获取分组列表(用于前端展示)
4.2.2 Service
- 创建
AgileConfigService服务 - 封装 AgileConfig API 调用
- 处理配置项的读取、更新逻辑
- 实现增量更新(只更新修改的配置项)
4.2.3 Model
- 创建实体类,或者直接返回从AgileConfig中读取的数据json格式(对应 AgileConfig 的配置项结构)
4.3 前端实现
4.3.1 页面组件
- 创建配置管理页面组件
- 实现分组折叠/展开功能
- 实现保存功能
4.3.3 数据管理
- 记录配置项的原始值
- 跟踪哪些配置项被修改
- 保存时只提交修改的配置项
五、对应的json格式
{
//项目配置
"AppConfig": {
"FlowerSendInterval":3600, //秒
"uploadServiceType":"cos"// 'cos' | 'server' 下拉框
"upload_config":{
// 图片压缩质量(0-100,越高质量越好但文件越大)
"imagequality": 80,
// 图片最大大小
"imagemaxsize": 10240, // 10mb
// 视频最大大小(字节)
"videomaxsize": 102400, // 100mb
//域名(如果使用cos上传)
"cosdomain": 'https://miaoyu-1308826010.cos.ap-shanghai.myqcloud.com' //文本框
},
"AppIcon":"",//图片地址图片上传
"AppPostEssenceIcon":""//图片地址 图片上传
},
// 数据库配置
"ConnectionStrings": {
"LiveForumConnection": "data source=192.168.195.15;User Id=sa;Password=Dbt@com@123;MultipleActiveResultSets=False;Encrypt=False;initial catalog=LiveForumDB;pooling=true;max pool size=100" //业务数据库
},
//jwt配置
"JwtTokenConfig": {
"accessTokenExpiration": "120",
"audience": "MP",
"issuer": "LiveForum",
"secret": "2C9AF5B22C94DB24A4FEB26BBF01C9AB"
},
//缓存配置
"Redis": {
"Configuration": "192.168.195.15:6379,defaultDatabase=2",
"InstanceName": "LiveForum:"
},
//过滤词配置
"SensitiveWord": {
"CacheExpiration": "86400",
"CacheKey": "SensitiveWords:Industry",
"CommonWordsPath": "wwwroot/sensitivewords",
"Mode": "Filter",
"ReplaceChar": "*"
},
//腾讯云配置
"TENCENT_COS": {
"APPID": "1308826010",
"BUCKET_NAME": "miaoyu",
"DOMAIN_URL": "https://miaoyu-1308826010.cos.ap-shanghai.myqcloud.com",
"MAX_SIZE": "100",
"REGION": "ap-shanghai",
"SECRET_ID": "AKIDVyMfzKZdZP8zkNyOdsFuSsBJDB7EScs0",
"SECRET_KEY": "89GWr7JPWYTL8ueHlAYowGZnvzKZjqs9"
},
//微信小程序配置
"Wechat": {
"AppId": "wxa17265f5fe8374b1",
"AppSecret": "af99a9c8f1b986ded540d317879cc799",
"EncodingAESKey": "",
"Token": ""
}
}
六、待确认事项
- ✅ App 已存在,不需要创建/管理 App
- ✅ 环境、App 等信息从 appsettings.json 读取
- ✅ 只更新修改的配置项(增量更新)
- ✅ 需要分组展示,部分分组不展示给用户
- ✅ JSON(用户稍后提供)
- ✅ 配置保存后自动发布
- ✅ json的具体类型在特俗类型在配置中已经添加注释
文档版本:v1.0
创建时间:2025-01-XX
最后更新:待补充配置项定义后更新