2 Star 3 Fork 0

YashanDB Community/yasrpc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
discovery_yas.go 1.86 KB
一键复制 编辑 原始数据 按行查看 历史
zhouyuxin 提交于 2023-05-31 17:30 +08:00 . feat: use gofmt
package yasrpc
import (
"net/http"
"strings"
"time"
"git.yasdb.com/go/yasrpc/log"
)
type YasRegistryDiscovery struct {
*MultiServersDiscovery
registry string
timeout time.Duration
lastUpdate time.Time
logger log.Logger
}
var _ Discovery = (*YasRegistryDiscovery)(nil)
const defaultUpdateTimeout = 10 * time.Second
func NewDawnRegistryDiscovery(registerAddr string, timeout time.Duration, logger log.Logger) *YasRegistryDiscovery {
if logger == nil {
logger = log.DefaultLogger
}
if timeout == 0 {
timeout = defaultUpdateTimeout
}
return &YasRegistryDiscovery{
MultiServersDiscovery: NewMultiServerDiscovery(make([]string, 0)),
registry: registerAddr,
timeout: timeout,
logger: logger,
}
}
func (d *YasRegistryDiscovery) Refresh() error {
d.mu.Lock()
defer d.mu.Unlock()
if d.lastUpdate.Add(d.timeout).After(time.Now()) {
return nil
}
d.logger.Info("rpc registry: refresh servers from registry", d.registry)
resp, err := http.Get(d.registry)
if err != nil {
d.logger.Error("rpc registry refresh err:", err)
return err
}
servers := strings.Split(resp.Header.Get(RegistryHeader), ",")
d.servers = make([]string, 0, len(servers))
for _, server := range servers {
if strings.TrimSpace(server) != "" {
d.servers = append(d.servers, strings.TrimSpace(server))
}
}
d.lastUpdate = time.Now()
return nil
}
func (d *YasRegistryDiscovery) Update(servers []string) error {
d.mu.Lock()
defer d.mu.Unlock()
d.servers = servers
d.lastUpdate = time.Now()
return nil
}
func (d *YasRegistryDiscovery) Get(mode SelectMode) (string, error) {
if err := d.Refresh(); err != nil {
return "", err
}
return d.MultiServersDiscovery.Get(mode)
}
func (d *YasRegistryDiscovery) GetAll() ([]string, error) {
if err := d.Refresh(); err != nil {
return nil, err
}
return d.MultiServersDiscovery.GetAll()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yashan_tech/yasrpc.git
git@gitee.com:yashan_tech/yasrpc.git
yashan_tech
yasrpc
yasrpc
master

搜索帮助