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

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)
}
}
}
}
})
}