55 lines
1.0 KiB
Go
55 lines
1.0 KiB
Go
package etcd
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
clientv3 "go.etcd.io/etcd/client/v3"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
cli *clientv3.Client
|
|
)
|
|
|
|
type LogEntry struct {
|
|
Path string `json:"path"`
|
|
Topic string `json:"topic"`
|
|
}
|
|
|
|
//初始化etcd
|
|
|
|
func Init(addr string, timeout time.Duration) (err error) {
|
|
cli, err = clientv3.New(clientv3.Config{
|
|
Endpoints: []string{addr},
|
|
DialTimeout: 5 * time.Second,
|
|
})
|
|
if err != nil {
|
|
//handle error!
|
|
fmt.Println("connect etcd server failed,error:", err)
|
|
return
|
|
}
|
|
fmt.Println("connect etcd server success")
|
|
return
|
|
}
|
|
|
|
// 从etcd中根据key获取配置项
|
|
|
|
func GetConf(key string) (logEntryConf []*LogEntry, err error) {
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
|
resp, err := cli.Get(ctx, key)
|
|
cancel()
|
|
if err != nil {
|
|
fmt.Println("get etcd config failed,error:", err)
|
|
}
|
|
for _, ev := range resp.Kvs {
|
|
err = json.Unmarshal(ev.Value, &logEntryConf)
|
|
if err != nil {
|
|
fmt.Println("parse etcd config failed,error:", err)
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|