77 lines
2.8 KiB
Go
77 lines
2.8 KiB
Go
// Package config 定义 room-service 的启动配置和 YAML 加载入口。
|
||
package config
|
||
|
||
import (
|
||
"time"
|
||
|
||
"hyapp/pkg/configx"
|
||
)
|
||
|
||
// Config 描述 room-service 进程启动所需的最小配置。
|
||
type Config struct {
|
||
// NodeID 是当前 room-service 实例标识,Redis lease owner 使用它。
|
||
NodeID string `yaml:"node_id"`
|
||
// GRPCAddr 是内部 gRPC 监听地址,gateway-service 和 im-service 都通过它访问 room-service。
|
||
GRPCAddr string `yaml:"grpc_addr"`
|
||
// LeaseTTL 是 room owner 租约有效期,节点故障后必须等它过期才能接管。
|
||
LeaseTTL time.Duration `yaml:"lease_ttl"`
|
||
// RankLimit 是房间本地礼物榜 top N。
|
||
RankLimit int `yaml:"rank_limit"`
|
||
// SnapshotEveryN 控制按房间版本保存快照的频率。
|
||
SnapshotEveryN int64 `yaml:"snapshot_every_n"`
|
||
// WalletServiceAddr 是 SendGift 同步扣费 gRPC 地址。
|
||
WalletServiceAddr string `yaml:"wallet_service_addr"`
|
||
// IMServiceAddr 是 PublishRoomEvent 同步广播 gRPC 地址。
|
||
IMServiceAddr string `yaml:"im_service_addr"`
|
||
// MySQLDSN 是 rooms、snapshot、command log 和 outbox 的持久化连接串。
|
||
MySQLDSN string `yaml:"mysql_dsn"`
|
||
// MySQLMaxOpenConns 控制 MySQL 最大打开连接数。
|
||
MySQLMaxOpenConns int `yaml:"mysql_max_open_conns"`
|
||
// MySQLMaxIdleConns 控制 MySQL 空闲连接数。
|
||
MySQLMaxIdleConns int `yaml:"mysql_max_idle_conns"`
|
||
// MySQLAutoMigrate 控制启动时是否自动建表。
|
||
MySQLAutoMigrate bool `yaml:"mysql_auto_migrate"`
|
||
// RedisAddr 是 room owner lease 目录地址。
|
||
RedisAddr string `yaml:"redis_addr"`
|
||
// RedisPassword 是 Redis 鉴权密码,本地默认留空。
|
||
RedisPassword string `yaml:"redis_password"`
|
||
// RedisDB 是 Redis logical DB。
|
||
RedisDB int `yaml:"redis_db"`
|
||
}
|
||
|
||
// Default 返回适合本地开发的默认配置。
|
||
func Default() Config {
|
||
// 默认端口遵守项目 13xxx 约束,MySQL/Redis 指向本地 Docker 暴露端口。
|
||
return Config{
|
||
NodeID: "room-node-local",
|
||
GRPCAddr: ":13001",
|
||
LeaseTTL: 10 * time.Second,
|
||
RankLimit: 20,
|
||
SnapshotEveryN: 1,
|
||
WalletServiceAddr: "127.0.0.1:13004",
|
||
IMServiceAddr: "127.0.0.1:13003",
|
||
MySQLDSN: "hyapp:hyapp@tcp(127.0.0.1:13306)/hyapp_room?parseTime=true&charset=utf8mb4&loc=Local",
|
||
MySQLMaxOpenConns: 20,
|
||
MySQLMaxIdleConns: 10,
|
||
MySQLAutoMigrate: true,
|
||
RedisAddr: "127.0.0.1:13379",
|
||
RedisDB: 0,
|
||
}
|
||
}
|
||
|
||
// Load 从独立 config.yaml 读取 room-service 配置。
|
||
func Load(path string) (Config, error) {
|
||
cfg := Default()
|
||
if path == "" {
|
||
// 空路径代表显式使用默认配置,便于单元测试和最小启动。
|
||
return cfg, nil
|
||
}
|
||
|
||
if err := configx.LoadYAML(path, &cfg); err != nil {
|
||
// YAML 解析失败返回空 Config,避免调用方误用部分默认值启动。
|
||
return Config{}, err
|
||
}
|
||
|
||
return cfg, nil
|
||
}
|