# 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` 读取 - 配置项如下: ```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格式 ```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": "" } } ``` ## 六、待确认事项 1. ✅ App 已存在,不需要创建/管理 App 2. ✅ 环境、App 等信息从 appsettings.json 读取 3. ✅ 只更新修改的配置项(增量更新) 4. ✅ 需要分组展示,部分分组不展示给用户 5. ✅ **JSON**(用户稍后提供) 6. ✅ 配置保存后自动发布 7. ✅ json的具体类型在特俗类型在配置中已经添加注释 --- **文档版本**:v1.0 **创建时间**:2025-01-XX **最后更新**:待补充配置项定义后更新