youtu_grpc/app/auth_service/internal/svc/service_context.go
xiabin 90f1d6eecf
All checks were successful
Auth & User Management Service CI / build-services (app/douyin_ecpm_calculation_service/Dockerfile, douyin_ecpm_calculation_service, douyin_ecpm_calculation_service) (push) Successful in 36s
Auth & User Management Service CI / build-services (app/ranking_management/Dockerfile, ranking_management, ranking_management) (push) Successful in 41s
Auth & User Management Service CI / build-services (app/auth_service/Dockerfile, auth_service, auth_service) (push) Successful in 41s
Auth & User Management Service CI / build-services (app/user_management/Dockerfile, user_manager, user_management) (push) Successful in 38s
Auth & User Management Service CI / start-services (push) Successful in 5s
各服务数据库逻辑拆分
更新用户id为Sonyflake

添加gitea actions(ci/cd)

配置文件读取方式改为从ETCD读取

修改go module名称与gitea一致
2025-02-11 18:31:28 +08:00

124 lines
3.1 KiB
Go
Raw 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 (
"context"
"encoding/json"
"gitea.youtukeji.com.cn/youtu/youtu_grpc/app/auth_service/internal/gen/dao/query"
cli2 "gitea.youtukeji.com.cn/youtu/youtu_grpc/app/auth_service/pkg"
"gitea.youtukeji.com.cn/youtu/youtu_grpc/app/user_management/user_management"
"gitea.youtukeji.com.cn/youtu/youtu_grpc/app/user_management/user_management_client"
"gitea.youtukeji.com.cn/youtu/youtu_grpc/pkg/config"
"github.com/silenceper/wechat/v2/cache"
redisCache "github.com/silenceper/wechat/v2/cache"
"github.com/spf13/viper"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/discov"
"github.com/zeromicro/go-zero/zrpc"
clientv3 "go.etcd.io/etcd/client/v3"
)
type ServiceContext struct {
Config config.Config
Cli cli2.Helper
UserManagerClient user_management_client.UserManagement
Query *query.Query
}
func NewServiceContext(c config.Config) *ServiceContext {
svc := &ServiceContext{
Config: c,
}
clientConf := zrpc.RpcClientConf{}
err := conf.FillDefault(&clientConf) // 填充默认值,比如 trace 透传等,参考服务配置说明
if err != nil {
panic(err)
}
clientConf.Token = "user_management.rpc.key"
clientConf.App = "user_management.rpc"
clientConf.Etcd = discov.EtcdConf{ // 通过 etcd 服务发现
Hosts: []string{viper.GetString(config.EtcdAddrKey)},
Key: "user_management.rpc",
}
svc.UserManagerClient = user_management.NewUserManagementClient(zrpc.MustNewClient(clientConf).Conn())
svc.InitClient()
return svc
}
type AppData struct {
AppId string `json:"appId"`
AppSecret string `json:"appSecret"`
Type string `json:"type"`
}
type AppDataList []AppData
const AppDataWatchKey = "/youtu/appData"
func (svc *ServiceContext) InitClient() {
dwCache := redisCache.NewRedis(context.Background(), &redisCache.RedisOpts{Host: svc.Config.Redis[0].Host})
cli, err := clientv3.NewFromURL(viper.GetString(config.EtcdAddrKey))
if err != nil {
panic(err)
}
res, err := cli.Get(context.TODO(), AppDataWatchKey)
if err != nil {
panic(err)
}
var appDataArr AppDataList
for _, kv := range res.Kvs {
var arr AppDataList
err = json.Unmarshal(kv.Value, &arr)
if err != nil {
panic(err)
}
appDataArr = append(appDataArr, arr...)
}
svc.SaveDW(appDataArr, dwCache)
go func() {
ch := cli.Watch(context.Background(), AppDataWatchKey)
//从通道中尝试取值(监视的信息)
for res := range ch {
var appDataArr AppDataList
for _, evt := range res.Events {
var arr AppDataList
err = json.Unmarshal(evt.Kv.Value, &arr)
if err != nil {
panic(err) //todo logger
}
appDataArr = append(appDataArr, arr...)
}
svc.SaveDW(appDataArr, dwCache)
}
}()
}
func (svc *ServiceContext) SaveDW(arr []AppData, dwCache cache.Cache) {
svc.Cli.Clear()
//配置小程序cli抖音&微信)
for _, v := range arr {
var c cli2.DWClient
switch v.Type {
case cli2.DouyinClientType:
c = cli2.NewDouYinApi(v.AppId, v.AppSecret, dwCache)
case cli2.WechatClientType:
c = cli2.NewWechatApi(v.AppId, v.AppSecret, dwCache)
default:
continue
}
svc.Cli.Set(v.AppId, c)
}
}