package svc import ( "github.com/zeromicro/go-zero/core/stores/redis" "github.com/zeromicro/go-zero/rest" "github.com/zeromicro/go-zero/zrpc" "tianyuan-api/apps/gateway/internal/config" "tianyuan-api/apps/gateway/internal/middleware" "tianyuan-api/apps/sentinel/sentinel" "tianyuan-api/apps/user/user" ) type ServiceContext struct { Config config.Config AuthInterceptor rest.Middleware EntAuthInterceptor rest.Middleware Redis *redis.Redis AuthRpc user.AuthClient EntRpc user.EnterpriseClient UserRpc user.UserClient Wallets user.WalletServiceClient ProductRpc sentinel.ProductClient UserProductRpc sentinel.UserProductClient WhitelistRpc sentinel.WhitelistClient SecretRpc sentinel.SecretClient TopUpRpc sentinel.TopUpClient } func NewServiceContext(c config.Config) *ServiceContext { redisConf := redis.RedisConf{ Host: c.CacheRedis[0].Host, Pass: c.CacheRedis[0].Pass, Type: c.CacheRedis[0].Type, // Redis 节点类型,如 "node" } // 使用 MustNewRedis 来初始化 Redis 客户端 rds := redis.MustNewRedis(redisConf) authRpc := user.NewAuthClient(zrpc.MustNewClient(c.UserRpc).Conn()) entRpc := user.NewEnterpriseClient(zrpc.MustNewClient(c.UserRpc).Conn()) userRpc := user.NewUserClient(zrpc.MustNewClient(c.UserRpc).Conn()) wallets := user.NewWalletServiceClient(zrpc.MustNewClient(c.UserRpc).Conn()) productRpc := sentinel.NewProductClient(zrpc.MustNewClient(c.SentinelRpc).Conn()) userProductRpc := sentinel.NewUserProductClient(zrpc.MustNewClient(c.SentinelRpc).Conn()) whitelistRpc := sentinel.NewWhitelistClient(zrpc.MustNewClient(c.SentinelRpc).Conn()) secretRpc := sentinel.NewSecretClient(zrpc.MustNewClient(c.SentinelRpc).Conn()) topUpRpc := sentinel.NewTopUpClient(zrpc.MustNewClient(c.SentinelRpc).Conn()) return &ServiceContext{ Config: c, AuthInterceptor: middleware.NewAuthInterceptorMiddleware(c).Handle, EntAuthInterceptor: middleware.NewEntAuthInterceptorMiddleware(userRpc).Handle, Redis: rds, // 单独使用的 Redis 客户端 AuthRpc: authRpc, EntRpc: entRpc, UserRpc: userRpc, ProductRpc: productRpc, UserProductRpc: userProductRpc, WhitelistRpc: whitelistRpc, SecretRpc: secretRpc, TopUpRpc: topUpRpc, Wallets: wallets, } }