我很难与etcd
watch
客户组合一起工作。
什么有效:我Watch
在golang
客户端做,我put
也在那里做。然后观察寄存器变化。如果我etcdctl
以相同的方式使用,即在命令行中同时观看/收听,它也可以工作。
什么不起作用:我从命令行发布并在 go 中观看,反之亦然。
- 看命令行,放 golang: 不起作用
- 观看命令行,输入命令行:有效
- 看golang,输入命令行:不起作用
- 看 golang,把 golang: 工作
“不起作用”是指未触发观察者。
我正在玩的 Go 代码(你可以像这样运行go run main.go (true|false) (true|false))
:
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