You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.0 KiB
Go
57 lines
1.0 KiB
Go
package app
|
|
|
|
import (
|
|
"context"
|
|
"joybuywork/internal/config"
|
|
"time"
|
|
|
|
"go.etcd.io/etcd/api/v3/mvccpb"
|
|
clientv3 "go.etcd.io/etcd/client/v3"
|
|
)
|
|
|
|
const (
|
|
EtcdPrefix = "/joybuywork"
|
|
EtcdConfig = EtcdPrefix + "/config"
|
|
)
|
|
|
|
var EtcdCli *clientv3.Client
|
|
|
|
func InitEtcdCli() (err error) {
|
|
EtcdCli, err = clientv3.New(clientv3.Config{
|
|
Endpoints: config.Config.Etcd.Address,
|
|
DialTimeout: 10 * time.Second,
|
|
})
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
watch()
|
|
return
|
|
}
|
|
|
|
func watch() {
|
|
GoSafe(func() {
|
|
for {
|
|
data, ok := <-EtcdCli.Watch(context.Background(), EtcdConfig, clientv3.WithPrefix(), clientv3.WithPrevKV())
|
|
if !ok || data.Canceled {
|
|
FeishuNormalSend("etcd 退出了, 数据 %+v, 错误:%v", data, ok)
|
|
return
|
|
}
|
|
|
|
for _, ev := range data.Events {
|
|
switch ev.Type {
|
|
case mvccpb.PUT:
|
|
switch string(ev.Kv.Key) {
|
|
case EtcdConfig + "/ads":
|
|
err := AdsInit(string(ev.Kv.Value))
|
|
FeishuNormalSend("重制广告配置[%s],错误:%v", string(ev.Kv.Value), err)
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
})
|
|
}
|