go-common/app/service/live/resource/sdk/titansSdk.go
2019-04-22 18:49:16 +08:00

90 lines
2.2 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 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
}