package svc import ( "github.com/zeromicro/go-queue/kq" "github.com/zeromicro/go-zero/core/stores/redis" "github.com/zeromicro/go-zero/rest" "github.com/zeromicro/go-zero/zrpc" "tianyuan-api/apps/api/internal/config" "tianyuan-api/apps/api/internal/middleware" "tianyuan-api/apps/api/internal/service" "tianyuan-api/apps/sentinel/sentinel" ) type ServiceContext struct { Config config.Config ApiAuthInterceptor rest.Middleware Redis *redis.Redis WhitelistRpc sentinel.WhitelistClient SecretRpc sentinel.SecretClient ProductRpc sentinel.ProductClient UserProductRpc sentinel.UserProductClient KqPusherClient *kq.Pusher WestDexService *service.WestDexService } 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) 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()) return &ServiceContext{ Config: c, Redis: rds, WhitelistRpc: whitelistRpc, SecretRpc: secretRpc, ProductRpc: productRpc, UserProductRpc: userProductRpc, ApiAuthInterceptor: middleware.NewApiAuthInterceptorMiddleware(whitelistRpc, secretRpc, userProductRpc, rds).Handle, KqPusherClient: kq.NewPusher(c.KqPusherConf.Brokers, c.KqPusherConf.Topic), WestDexService: service.NewWestDexService(c.WestConfig.Key, c.WestConfig.SecretId), // 假设你将密钥和 ID 配置在 config 中 } }