mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-05-17 17:47:33 +08:00
115 lines
2.5 KiB
Markdown
115 lines
2.5 KiB
Markdown
# 02 Gateway 结构拆分
|
|
|
|
## 背景
|
|
|
|
`cmd/cmd_gateway.go` 当前同时承担 gateway 命令解析、服务注册、runtime 组装、热重载、API handler 注入、channel 生命周期、cron/heartbeat/sentinel 编排、bootstrap 初始化等职责。文件过大,后续修改容易产生回归。
|
|
|
|
## 目标
|
|
|
|
在不改变行为的前提下拆分 Gateway 代码结构,让每类职责有清晰文件边界。
|
|
|
|
## 建议改动范围
|
|
|
|
主要文件:
|
|
|
|
- `cmd/cmd_gateway.go`
|
|
- 新增 `cmd/gateway_runtime.go`
|
|
- 新增 `cmd/gateway_reload.go`
|
|
- 新增 `cmd/gateway_services.go`
|
|
- 新增 `cmd/gateway_bootstrap.go`
|
|
|
|
可选文件:
|
|
|
|
- `cmd/reload_windows.go`
|
|
- `cmd/reload_unix.go`
|
|
- `cmd/signals_windows.go`
|
|
- `cmd/signals_unix.go`
|
|
|
|
尽量避免修改:
|
|
|
|
- `pkg/api/server.go`
|
|
- `pkg/agent/*`
|
|
- `pkg/providers/*`
|
|
- `pkg/channels/*`
|
|
|
|
## 建议拆分
|
|
|
|
### `cmd/cmd_gateway.go`
|
|
|
|
保留命令入口和高层流程:
|
|
|
|
- 参数分发。
|
|
- `gateway run/start/stop/restart/status` 分支。
|
|
- 前台 run 的主流程骨架。
|
|
|
|
### `cmd/gateway_runtime.go`
|
|
|
|
放运行时组装:
|
|
|
|
- `buildGatewayRuntime`
|
|
- `bindAgentLoopHandlers`
|
|
- `configureCronServiceRuntime`
|
|
- `buildHeartbeatService`
|
|
- `dispatchCronJob`
|
|
- `normalizeCronTargetChatID`
|
|
|
|
### `cmd/gateway_reload.go`
|
|
|
|
放热重载:
|
|
|
|
- config fingerprint。
|
|
- config watcher。
|
|
- reload trigger。
|
|
- runtimeSame 判断。
|
|
- reload 后重新绑定 API handler、channel、sentinel。
|
|
|
|
### `cmd/gateway_services.go`
|
|
|
|
放系统服务注册/控制:
|
|
|
|
- Linux systemd。
|
|
- macOS launchd。
|
|
- Windows scheduled task。
|
|
- PID file stop。
|
|
|
|
### `cmd/gateway_bootstrap.go`
|
|
|
|
放启动辅助任务:
|
|
|
|
- startup compaction check。
|
|
- bootstrap init。
|
|
- maximum permission policy。
|
|
|
|
## 验收标准
|
|
|
|
- 行为不变,命令仍可用:
|
|
|
|
```bash
|
|
go run ./cmd gateway run --config ./config.json
|
|
go run ./cmd gateway status --config ./config.json
|
|
```
|
|
|
|
- `go test ./...` 通过。
|
|
- `cmd/cmd_gateway.go` 明显变薄,职责聚焦于命令入口。
|
|
- 新文件命名和函数归属清晰。
|
|
- 没有引入循环依赖或跨 package 重构。
|
|
|
|
## 测试建议
|
|
|
|
```bash
|
|
go test ./cmd ./pkg/api ./pkg/channels ./pkg/agent
|
|
go test ./...
|
|
```
|
|
|
|
如果有本地配置,可额外手动验证:
|
|
|
|
```bash
|
|
go run ./cmd gateway run --config ./config.json
|
|
```
|
|
|
|
启动后修改配置文件,观察热重载日志是否仍正常。
|
|
|
|
## 并行注意
|
|
|
|
本任务应避免改 API 路由和 Provider 行为。若 API 文档任务并行进行,它只读 `pkg/api/server.go`,双方冲突较小。
|