1 Star 0 Fork 0

saxon134/sysmain

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
sdp.client.discovery.go 2.41 KB
一键复制 编辑 原始数据 按行查看 历史
saxon134 提交于 2024-05-06 10:57 . fix
package sdp
import (
"fmt"
"github.com/saxon134/go-utils/saData"
"github.com/saxon134/go-utils/saData/saUrl"
"math/rand"
"strings"
)
var _last map[string]string
// Discovery 查找可用服务
func (m *Client) Discovery(app string) (host string, port int) {
if app == "" {
return "", 0
}
var last = ""
if _last == nil {
_last = map[string]string{}
}
last = _last[app]
var sdpAry = m.getSdpAry(app)
var lastIsOk = false //尽量选择一个跟上次的不一样的实例
if sdpAry != nil && len(sdpAry) > 0 {
var weight = 0
for _, v := range sdpAry {
var link = fmt.Sprintf("%s:%d", v.Host, v.Port)
if last != link {
weight += v.Weight
} else {
lastIsOk = true
}
}
if weight > 0 {
var r = rand.Intn(weight)
for _, v := range sdpAry {
var link = fmt.Sprintf("%s:%d", v.Host, v.Port)
if last != link {
if weight >= r {
_last[app] = fmt.Sprintf("%s:%d", v.Host, v.Port)
return saUrl.QueryDecode(v.Host), v.Port
}
weight += v.Weight
}
}
}
if lastIsOk {
var ary = strings.Split(last, ":")
if len(ary) == 2 {
return saUrl.QueryDecode(ary[0]), saData.Int(ary[1])
}
}
}
return "", 0
}
func (m *Client) getSdpAry(app string) []*Instance {
//var cacheTime = time.Minute
//if m.redis != nil {
// cacheTime = time.Second * time.Duration((m.pingSecond + 3))
//}
//value, _ := saCache.MSetWithFunc("discoveryApp:"+app, cacheTime, func() (interface{}, error) {
// if m.redis != nil {
// var sdpAry = make([]*Instance, 0, 10)
// var key = fmt.Sprintf(RedisAppKey, app)
// err := m.redis.GetObj(key, &sdpAry)
// if m.redis.IsError(err) {
// return nil, err
// }
// return sdpAry, nil
// } else {
// var params = map[string]string{"app": app}
// if m.secret != "" {
// var timestamp = saData.I64tos(time.Now().Unix())
// params["timestamp"] = timestamp
// params["sign"] = saData.Md5(m.secret+timestamp, true)
// }
//
// res, err := saHttp.Get(saUrl.ConnectUri(m.sysmainUrl, "sdp/discovery"), params)
// if err != nil {
// saLog.Err("discovery error:", err)
// return nil, err
// }
//
// var resObj = struct {
// Result []*Instance
// }{Result: make([]*Instance, 0, 5)}
// _ = saData.StrToModel(res, &resObj)
// if len(resObj.Result) == 0 {
// return nil, errs.ErrorNotExisted
// }
// return resObj.Result, err
// }
//})
//if v, ok := value.([]*Instance); ok {
// return v
//}
return nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/saxon134/sysmain.git
git@gitee.com:saxon134/sysmain.git
saxon134
sysmain
sysmain
1f16b4e328ad

搜索帮助

D67c1975 1850385 1daf7b77 1850385