package svc import ( "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stores/redis" "github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/zrpc" "tianyuan-api/apps/sentinel/sentinel" "tianyuan-api/apps/user/internal/config" "tianyuan-api/apps/user/internal/model" ) type ServiceContext struct { Config config.Config Redis *redis.Redis UserModel model.UsersModel // 用户表的模型 EnterpriseModel model.EnterpriseInfoModel EnterpriseAuthModel model.EnterpriseAuthModel WalletsModel model.WalletsModel DeductionsModel model.DeductionsModel ApiRequestsModel model.ApiRequestsModel RechargeModel model.RechargeModel SecretRpc sentinel.SecretClient ProductRpc sentinel.ProductClient } func NewServiceContext(c config.Config) *ServiceContext { db := sqlx.NewMysql(c.DataSource) // 创建数据库连接 redisConf := redis.RedisConf{ Host: c.CacheRedis[0].Host, Pass: c.CacheRedis[0].Pass, Type: c.CacheRedis[0].Type, // Redis 节点类型,如 "node" } // 初始化 SecretRpc 和 ProductRpc var secretRpc sentinel.SecretClient var productRpc sentinel.ProductClient // 捕获RPC初始化时的错误,但不影响服务启动 secretClient, err := zrpc.NewClient(c.SentinelRpc) if err != nil { logx.Errorf("Failed to connect to SecretRpc: %v", err) } else { secretRpc = sentinel.NewSecretClient(secretClient.Conn()) } productClient, err := zrpc.NewClient(c.SentinelRpc) if err != nil { logx.Errorf("Failed to connect to ProductRpc: %v", err) } else { productRpc = sentinel.NewProductClient(productClient.Conn()) } // 使用 MustNewRedis 来初始化 Redis 客户端 rds := redis.MustNewRedis(redisConf) return &ServiceContext{ Config: c, Redis: rds, // 单独使用的 Redis 客户端 UserModel: model.NewUsersModel(db, c.CacheRedis), // 注入UserModel EnterpriseModel: model.NewEnterpriseInfoModel(db, c.CacheRedis), EnterpriseAuthModel: model.NewEnterpriseAuthModel(db, c.CacheRedis), WalletsModel: model.NewWalletsModel(db, c.CacheRedis), DeductionsModel: model.NewDeductionsModel(db, c.CacheRedis), ApiRequestsModel: model.NewApiRequestsModel(db, c.CacheRedis), RechargeModel: model.NewRechargeModel(db, c.CacheRedis), SecretRpc: secretRpc, // 捕获连接错误后,继续运行 ProductRpc: productRpc, // 捕获连接错误后,继续运行 } }