tianyuan-api-server/apps/user/internal/svc/servicecontext.go

74 lines
2.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
UserConfigModel model.UserConfigModel
SecretRpc sentinel.SecretClient
ProductRpc sentinel.ProductClient
UserProductRpc sentinel.UserProductClient
}
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
var userProductRpc sentinel.UserProductClient
// 捕获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())
userProductRpc = sentinel.NewUserProductClient(productClient.Conn())
}
// 使用 MustNewRedis 来初始化 Redis 客户端
rds := redis.MustNewRedis(redisConf)
return &ServiceContext{
Config: c,
Redis: rds, // 单独使用的 Redis 客户端
UserModel: model.NewUsersModel(db, c.CacheRedis), // 注入UserModel
UserConfigModel: model.NewUserConfigModel(db, c.CacheRedis),
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, // 捕获连接错误后,继续运行
UserProductRpc: userProductRpc,
}
}