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一致
124 lines
3.1 KiB
Go
124 lines
3.1 KiB
Go
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)
|
||
}
|
||
}
|