当前仓库属于关闭状态,部分功能使用受限,详情请查阅 仓库状态说明
3 Star 1 Fork 1

Jason的雷哥 / go-utils
关闭

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
naming.go 1.54 KB
一键复制 编辑 原始数据 按行查看 历史
Jason的雷哥 提交于 2018-01-25 17:00 . 1. 新增MySQL连接中间件
package etcdv3
import (
"context"
"crypto/tls"
"strings"
"time"
"github.com/golang/glog"
"github.com/coreos/etcd/clientv3"
)
// Register register service with name as prefix to etcd, multi etcd addr should use ; to split
func Register(etcdAddr string, name string, addr string, ttl int64, tls *tls.Config) error {
var err error
if cli == nil {
cli, err = clientv3.New(clientv3.Config{
Endpoints: strings.Split(etcdAddr, ","),
DialTimeout: 15 * time.Second,
TLS: tls,
})
if err != nil {
return err
}
}
ticker := time.NewTicker(time.Second * time.Duration(ttl))
go func() {
for {
getResp, err := cli.Get(context.Background(), "/"+schema+"/"+name+"/"+addr)
if err != nil {
glog.Errorln(err)
} else if getResp.Count == 0 {
err = withAlive(name, addr, ttl)
if err != nil {
glog.Errorln(err)
}
} else {
// do nothing
}
<-ticker.C
}
}()
return nil
}
func withAlive(name string, addr string, ttl int64) error {
leaseResp, err := cli.Grant(context.Background(), ttl)
if err != nil {
return err
}
_, err = cli.Put(context.Background(), "/"+schema+"/"+name+"/"+addr, addr, clientv3.WithLease(leaseResp.ID))
if err != nil {
return err
}
_, err = cli.KeepAlive(context.Background(), leaseResp.ID)
if err != nil {
return err
}
return nil
}
// UnRegister remove service from etcd
func UnRegister(name string, addr string) error {
if cli != nil {
_, err := cli.Delete(context.Background(), "/"+schema+"/"+name+"/"+addr)
if err != nil {
return err
}
}
return nil
}
Go
1
https://gitee.com/jason_elva8325/go-utils.git
git@gitee.com:jason_elva8325/go-utils.git
jason_elva8325
go-utils
go-utils
v1.1.1

搜索帮助