100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
"hyapp/pkg/configx"
|
|
"hyapp/pkg/logx"
|
|
)
|
|
|
|
// Config 描述 game-service 启动所需的最小依赖。
|
|
type Config struct {
|
|
ServiceName string `yaml:"service_name"`
|
|
NodeID string `yaml:"node_id"`
|
|
Environment string `yaml:"environment"`
|
|
GRPCAddr string `yaml:"grpc_addr"`
|
|
// HealthHTTPAddr 是给 CLB/发布脚本探活使用的 HTTP 监听地址,不承载业务流量。
|
|
HealthHTTPAddr string `yaml:"health_http_addr"`
|
|
MySQLDSN string `yaml:"mysql_dsn"`
|
|
WalletServiceAddr string `yaml:"wallet_service_addr"`
|
|
UserServiceAddr string `yaml:"user_service_addr"`
|
|
LaunchSessionTTL time.Duration `yaml:"launch_session_ttl"`
|
|
Log logx.Config `yaml:"log"`
|
|
}
|
|
|
|
// Default 返回本地开发默认配置。
|
|
func Default() Config {
|
|
return Config{
|
|
ServiceName: "game-service",
|
|
NodeID: "game-local",
|
|
Environment: "local",
|
|
GRPCAddr: ":13008",
|
|
HealthHTTPAddr: ":13108",
|
|
MySQLDSN: "hyapp:hyapp@tcp(127.0.0.1:23306)/hyapp_game?parseTime=true&charset=utf8mb4&loc=UTC&multiStatements=true",
|
|
WalletServiceAddr: "127.0.0.1:13004",
|
|
UserServiceAddr: "127.0.0.1:13005",
|
|
LaunchSessionTTL: 15 * time.Minute,
|
|
Log: logx.Config{
|
|
Level: "info",
|
|
Format: "json",
|
|
MaxPayloadBytes: 2048,
|
|
},
|
|
}
|
|
}
|
|
|
|
// Load 从 YAML 文件读取配置,并填充默认值。
|
|
func Load(path string) (Config, error) {
|
|
cfg := Default()
|
|
if path != "" {
|
|
if err := configx.LoadYAML(path, &cfg); err != nil {
|
|
return Config{}, err
|
|
}
|
|
}
|
|
if err := cfg.Normalize(); err != nil {
|
|
return Config{}, err
|
|
}
|
|
return cfg, nil
|
|
}
|
|
|
|
// Normalize 在启动时收敛配置,避免运行期才暴露关键依赖缺失。
|
|
func (cfg *Config) Normalize() error {
|
|
cfg.ServiceName = strings.TrimSpace(cfg.ServiceName)
|
|
if cfg.ServiceName == "" {
|
|
cfg.ServiceName = "game-service"
|
|
}
|
|
cfg.NodeID = strings.TrimSpace(cfg.NodeID)
|
|
if cfg.NodeID == "" {
|
|
cfg.NodeID = cfg.ServiceName
|
|
}
|
|
cfg.Environment = strings.TrimSpace(cfg.Environment)
|
|
if cfg.Environment == "" {
|
|
cfg.Environment = "local"
|
|
}
|
|
cfg.GRPCAddr = strings.TrimSpace(cfg.GRPCAddr)
|
|
if cfg.GRPCAddr == "" {
|
|
cfg.GRPCAddr = ":13008"
|
|
}
|
|
cfg.HealthHTTPAddr = strings.TrimSpace(cfg.HealthHTTPAddr)
|
|
if cfg.HealthHTTPAddr == "" {
|
|
cfg.HealthHTTPAddr = ":13108"
|
|
}
|
|
cfg.MySQLDSN = strings.TrimSpace(cfg.MySQLDSN)
|
|
if cfg.MySQLDSN == "" {
|
|
return fmt.Errorf("mysql_dsn is required")
|
|
}
|
|
cfg.WalletServiceAddr = strings.TrimSpace(cfg.WalletServiceAddr)
|
|
if cfg.WalletServiceAddr == "" {
|
|
return fmt.Errorf("wallet_service_addr is required")
|
|
}
|
|
cfg.UserServiceAddr = strings.TrimSpace(cfg.UserServiceAddr)
|
|
if cfg.UserServiceAddr == "" {
|
|
return fmt.Errorf("user_service_addr is required")
|
|
}
|
|
if cfg.LaunchSessionTTL <= 0 {
|
|
cfg.LaunchSessionTTL = 15 * time.Minute
|
|
}
|
|
return nil
|
|
}
|