Files
Web_BLS_ProjectConsole/docs/redis-integration-protocol.md
XuJiacheng 19e65d78dc feat: 实现Redis集成协议并重构项目控制台
refactor(backend): 重构后端服务以支持Redis协议
feat(backend): 添加Redis客户端和服务模块
feat(backend): 实现命令和日志路由处理Redis交互
refactor(frontend): 重构前端状态管理和组件结构
feat(frontend): 实现基于Redis的日志和命令功能
docs: 添加Redis集成协议文档
chore: 更新ESLint配置和依赖
2026-01-12 19:55:51 +08:00

3.8 KiB
Raw Blame History

Redis 对接协议(供外部项目 AI 生成代码使用)

本文档定义“外部项目 ↔ BLS Project Console”之间通过 Redis 交互的 Key 命名、数据类型、写入方式、读取方式与数据格式

约束:每个需要关联本控制台的外部项目,必须在本项目使用的同一个 Redis 实例中:

  • 写入 2 个 Key状态 + 控制台信息)
  • 读取 1 个 Key控制指令队列

1. 命名约定

令:

  • projectName:外部项目名称(建议只用字母数字下划线 A-Za-z0-9_;如使用中文也可,但需保证统一且 UTF-8

固定后缀:

  • 状态:${projectName}_项目状态
  • 控制台:${projectName}_项目控制台
  • 控制:${projectName}_控制

示例projectName = 订单系统

  • 订单系统_项目状态
  • 订单系统_项目控制台
  • 订单系统_控制

2. 外部项目需要写入的 2 个 Key

2.1 ${projectName}_项目状态

  • Redis 数据类型:STRING
  • 写入方式:SET ${projectName}_项目状态 <status>
  • value状态枚举必须为以下之一
    • 在线
    • 离线
    • 故障
    • 报错

建议(非强制):

  • 定期刷新(如 5~30 秒)
  • 可设置 TTL 防止僵尸在线(如 SET key value EX 60

2.2 ${projectName}_项目控制台

  • Redis 数据类型:LIST(作为项目向控制台追加的“消息队列/日志队列”)
  • 写入方式(推荐 FIFORPUSH ${projectName}_项目控制台 <json>

value推荐格式一条 JSON 字符串,表示“错误/调试信息”或日志记录。

推荐 JSON Schema字段尽量保持稳定便于控制台解析

{
  "timestamp": "2026-01-12T12:34:56.789Z",
  "level": "info",
  "message": "连接成功",
  "metadata": {
    "module": "redis",
    "host": "127.0.0.1"
  }
}

字段说明:

  • timestampISO-8601 时间字符串
  • level:建议取值 info|warn|error|debug(小写)
  • message:日志文本
  • metadata:可选对象(附加信息)

3. 外部项目需要读取的 1 个 Key控制指令

3.1 ${projectName}_控制

  • Redis 数据类型:LIST(控制台向目标项目下发的“命令队列”)
  • 队列模式(必须):Redis List 队列(生产 RPUSH,消费 BLPOP;必要时配合 LTRIM
  • 控制台写入方式FIFORPUSH ${targetProjectName}_控制 <json>
  • 外部项目读取方式(阻塞消费,推荐):BLPOP ${projectName}_控制 0

说明:BLPOP 本身会原子性地“取出并移除”队列头元素,通常不需要额外 LTRIM。 如果你的运行环境/客户端库无法可靠使用 BLPOP,或你希望采用“读取 + 修剪LTRIM”的显式确认方式可使用兼容模式

  1. LRANGE ${projectName}_控制 0 0 读取 1 条
  2. 处理成功后执行 LTRIM ${projectName}_控制 1 -1 修剪已消费元素

valueJSON 对象(在 Redis 中以 JSON 字符串形式存储)。

推荐 JSON Schema

{
  "id": "cmd-1700000000000-abc123",
  "timestamp": "2026-01-12T12:35:00.000Z",
  "source": "BLS Project Console",
  "command": "reload",
  "args": {
    "force": true
  }
}

字段说明:

  • id:命令唯一 ID用于追踪
  • timestamp:命令下发时间
  • source:固定可写 BLS Project Console
  • command:命令名称或命令文本
  • args:可选对象参数

4. 兼容与错误处理建议

  • JSON 解析失败:外部项目应记录错误,并丢弃该条消息(避免死循环阻塞消费)。
  • 消息过长:建议控制单条消息大小(例如 < 64KB
  • 字符编码:统一 UTF-8。

5. 与本项目代码的对应关系(实现中)

后端通过 /api/commands 将命令写入 ${targetProjectName}_控制;通过 /api/logs 读取 ${projectName}_项目控制台(以仓库当前实现为准)。