1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package titansSdk
- import (
- "context"
- "go-common/app/service/live/resource/api/grpc/v1"
- "go-common/library/ecode"
- "go-common/library/log"
- "go-common/library/net/rpc/warden"
- "sync/atomic"
- "time"
- )
- // titansConfigSdk 初始化时 单实例对象
- var titansConfigSdk = &titansSdk{}
- // Config 服务可配置项
- type Config struct {
- // 服务的tree_id
- TreeId int64
- // 缓存的更新间隔,单位为s,不配置则为5s
- Expire int64
- }
- // titansSdk sdk
- type titansSdk struct {
- client v1.TitansClient
- cache atomic.Value
- }
- // Init 业务初始化sdk接口
- func Init(titansConfig *Config) {
- conf := &warden.ClientConfig{}
- client := warden.NewClient(conf)
- conn, err := client.Dial(context.Background(), "discovery://default/"+v1.AppID)
- if err != nil {
- panic("依赖TitansConfig, 但是Titans的Client没有创建成功!")
- }
- if titansConfig.TreeId == 0 {
- panic("依赖了TitansConfig, 但是titansConfig的treeId配置为空!")
- }
- titansConfigSdk = &titansSdk{}
- titansConfigSdk.client = v1.NewTitansClient(conn)
- titansConfigSdk.cache.Store(make(map[string]string))
- load(titansConfigSdk, titansConfig.TreeId)
- go update(titansConfigSdk, titansConfig.TreeId, titansConfig.Expire)
- }
- // update 定时更新
- func update(sdk *titansSdk, treeId int64, expire int64) {
- if expire < 1 {
- expire = 5
- }
- for {
- load(sdk, treeId)
- time.Sleep(time.Duration(expire) * time.Second)
- }
- }
- // load grpc接口
- func load(sdk *titansSdk, treeId int64) {
- for {
- resp, err := sdk.client.GetByTreeId(context.Background(), &v1.TreeIdReq{TreeId: treeId})
- if err != nil {
- log.Error("[SyncTitansConfig][call resource][error], err:%+v", err)
- } else {
- sdk.cache.Store(resp.List)
- break
- }
- time.Sleep(1 * time.Second)
- }
- }
- // Get 获取配置接口
- func Get(keyword string) (res string, err error) {
- res = ""
- cache, ok := titansConfigSdk.cache.Load().(map[string]string)
- if !ok {
- log.Error("[GetTitansConfig][cache content exception][error] content assert failed")
- err = ecode.GetConfAdminErr
- return
- }
- res, ok = cache[keyword]
- if !ok || res == "" {
- log.Error("[GetTitansConfig][cache content empty][Warn], keyword:%s, cache:%v", keyword, cache)
- err = ecode.GetConfAdminErr
- return
- }
- return
- }
|