103 lines
3.2 KiB
Go
103 lines
3.2 KiB
Go
package config
|
||
|
||
import (
|
||
"strings"
|
||
|
||
"hyapp/pkg/configx"
|
||
"hyapp/pkg/logx"
|
||
)
|
||
|
||
// Config 描述 activity-service 启动配置。
|
||
type Config struct {
|
||
ServiceName string `yaml:"service_name"`
|
||
NodeID string `yaml:"node_id"`
|
||
Environment string `yaml:"environment"`
|
||
GRPCAddr string `yaml:"grpc_addr"`
|
||
// MySQLDSN 是活动状态、事件消费幂等和 outbox 的必需存储连接串。
|
||
MySQLDSN string `yaml:"mysql_dsn"`
|
||
// UserServiceAddr 是 fanout worker 读取目标用户游标的内部 gRPC 地址。
|
||
UserServiceAddr string `yaml:"user_service_addr"`
|
||
// WalletServiceAddr 是任务奖励入账依赖;activity 只发命令,不直接写余额。
|
||
WalletServiceAddr string `yaml:"wallet_service_addr"`
|
||
// TaskTimezone 是 daily 任务统一周期时区,不能使用客户端手机时区。
|
||
TaskTimezone string `yaml:"task_timezone"`
|
||
// MySQLAutoMigrate 保留给显式本地迁移;线上 schema 由发布流程或 initdb 管理。
|
||
MySQLAutoMigrate bool `yaml:"mysql_auto_migrate"`
|
||
Consumer ConsumerConfig `yaml:"consumer"`
|
||
MessageInbox MessageInboxConfig `yaml:"message_inbox"`
|
||
Log logx.Config `yaml:"log"`
|
||
}
|
||
|
||
// ConsumerConfig 保存 room outbox 消费底座配置。
|
||
type ConsumerConfig struct {
|
||
RoomOutboxPollIntervalMs int64 `yaml:"room_outbox_poll_interval_ms"`
|
||
BatchSize int `yaml:"batch_size"`
|
||
}
|
||
|
||
// MessageInboxConfig 保存 App system/activity inbox 的读取缓存参数;fanout 扫描由 cron-service 调度。
|
||
type MessageInboxConfig struct {
|
||
UnreadCacheTTL string `yaml:"unread_cache_ttl"`
|
||
}
|
||
|
||
// Default 返回本地默认配置。
|
||
func Default() Config {
|
||
return Config{
|
||
ServiceName: "activity-service",
|
||
NodeID: "activity-local",
|
||
Environment: "local",
|
||
GRPCAddr: ":13006",
|
||
MySQLDSN: "hyapp:hyapp@tcp(127.0.0.1:23306)/hyapp_activity?parseTime=true&charset=utf8mb4&loc=Local",
|
||
UserServiceAddr: "127.0.0.1:13005",
|
||
WalletServiceAddr: "127.0.0.1:13004",
|
||
TaskTimezone: "Asia/Shanghai",
|
||
MySQLAutoMigrate: false,
|
||
Consumer: ConsumerConfig{
|
||
RoomOutboxPollIntervalMs: 1000,
|
||
BatchSize: 100,
|
||
},
|
||
MessageInbox: MessageInboxConfig{
|
||
UnreadCacheTTL: "60s",
|
||
},
|
||
Log: logx.Config{
|
||
Level: "info",
|
||
Format: "json",
|
||
MaxPayloadBytes: 2048,
|
||
},
|
||
}
|
||
}
|
||
|
||
// Load 从独立 config.yaml 读取 activity-service 配置。
|
||
func Load(path string) (Config, error) {
|
||
cfg := Default()
|
||
if path == "" {
|
||
return cfg, nil
|
||
}
|
||
|
||
if err := configx.LoadYAML(path, &cfg); err != nil {
|
||
return Config{}, err
|
||
}
|
||
if strings.TrimSpace(cfg.UserServiceAddr) == "" {
|
||
cfg.UserServiceAddr = Default().UserServiceAddr
|
||
}
|
||
if strings.TrimSpace(cfg.WalletServiceAddr) == "" {
|
||
cfg.WalletServiceAddr = Default().WalletServiceAddr
|
||
}
|
||
if strings.TrimSpace(cfg.TaskTimezone) == "" {
|
||
cfg.TaskTimezone = Default().TaskTimezone
|
||
}
|
||
cfg.ServiceName = strings.TrimSpace(cfg.ServiceName)
|
||
if cfg.ServiceName == "" {
|
||
cfg.ServiceName = "activity-service"
|
||
}
|
||
cfg.NodeID = strings.TrimSpace(cfg.NodeID)
|
||
if cfg.NodeID == "" {
|
||
cfg.NodeID = cfg.ServiceName
|
||
}
|
||
cfg.Environment = strings.ToLower(strings.TrimSpace(cfg.Environment))
|
||
if cfg.Environment == "" {
|
||
cfg.Environment = "local"
|
||
}
|
||
|
||
return cfg, nil
|
||
}
|