69 lines
2.5 KiB
Go
69 lines
2.5 KiB
Go
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, // 捕获连接错误后,继续运行
|
||
}
|
||
}
|