76 lines
2.0 KiB
Markdown
76 lines
2.0 KiB
Markdown
# 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
|
||
```
|