我很难让etcd
watch
与客户组合工作。
什么有效:我在Watch
客户端golang
进行了put
我也在那里做etcdctl
。然后观察寄存器更改。如果我以相同的方式使用go run main.go (true|false) (true|false))
,即在命令行中观察/收听它也可以。
什么不起作用:我从命令行发布并在go中观看,反之亦然。
By"不起作用"我的意思是观察者没有被触发。
我正在玩的代码(你可以像package main
import (
"github.com/coreos/etcd/clientv3"
"context"
"time"
"fmt"
"os"
)
func main() {
listen := os.Args[1]
submit := os.Args[2]
cfg := clientv3.Config{
Endpoints: []string{"http://10.0.75.1:2379"},
}
c,_ := clientv3.New(cfg)
if listen == "true" {
fmt.Println("listening: on")
ch := c.Watch(context.Background(), "/foo")
go func() {
for s := range ch {
fmt.Println("change: ", string(s.Events[0].Kv.Value))
}
}()
} else {
fmt.Println("listening: off")
}
if submit == "true" {
fmt.Println("submiting: on")
go func() {
for {
c.Put(context.Background(), "/foo", time.Now().String())
time.Sleep(1 * time.Second)
}
}()
} else {
fmt.Println("submiting: off")
}
println("waiting 1h")
time.Sleep(1 * time.Hour)
}
一样运行:
etcdctl
我用来发布/观看的 no_proxy=10.0.75.1 ETCDCTL_API=3 etcdctl.exe --endpoints=http://10.0.75.1:2379 put /foo "$(date)"
命令:
更新
no_proxy=10.0.75.1 ETCDCTL_API=3 etcdctl.exe --endpoints=http://10.0.75.1:2379 watch /foo
手表:
{{1}}