# robot-service `robot-service` 是后端独立机器人账号池服务,当前拆成两个域: - `game-robot`:自研游戏机器人池,给 `game-service` 匹配机器人补位使用。 - `room-robot`:房间机器人账号池,首版只管理账号可用性,不直接操作 Room Cell。 ## 边界 - robot-service 只保存“哪些真实用户可以作为机器人”的登记事实。 - 用户资料、头像、昵称仍由 `user-service/likei` 用户库负责。 - 游戏局、结算、奖池、forced_result 仍由 `game-service` 负责。 - 房间进入、离开、麦位、IM 事件仍由 `room-service` 负责。 ## 数据库 新逻辑使用独立库: - `hyapp_robot.robot_game_robots` - `hyapp_robot.robot_room_robots` - `hyapp_robot.robot_service_migrations` 旧库旧表保留不删除: - `hyapp_game.game_self_game_robots` 启动时如果 `legacy_game_database` 配置为 `hyapp_game`,服务会把旧 `game_self_game_robots` 聚合迁移到 `robot_game_robots`。迁移完成后会写入 `robot_service_migrations`,之后不会再用旧表覆盖新表。 ## 配置 本地配置: ```yaml grpc_addr: ":13011" health_http_addr: ":13111" mysql_dsn: "hyapp:hyapp@tcp(127.0.0.1:23306)/hyapp_robot?parseTime=true&charset=utf8mb4&loc=UTC&multiStatements=true" legacy_game_database: "hyapp_game" ``` Docker 配置使用 `mysql:3306`,线上配置使用 `ROBOT_MYSQL_DSN`。 ## RPC Proto 文件: - `api/proto/robot/v1/robot.proto` 服务: - `GameRobotService` - `RoomRobotService` `PickGameRobot` 接收 `exclude_user_ids`,由 `game-service` 传入当前局参与者,robot-service 不再读取游戏局表来排除用户。 ## 本地运行 ```bash ./scripts/apply-local-mysql-initdb.sh make up robot ``` 健康检查: ```bash curl http://127.0.0.1:13111/healthz/ready ``` ## 验证 ```bash PATH="/Users/hy/go/bin:$PATH" make proto go test ./services/robot-service/... go test ./services/game-service/internal/service/dice ./services/game-service/internal/client ./services/game-service/internal/app docker compose config ```