我很难etcd watch与多种客户合作。
什么有效:我Watch在golang客户端做,我put也在那里做。然后观察寄存器的变化。如果我etcdctl以相同的方式使用,即在命令行中观看/收听,它也可以工作。
什么不起作用:我从命令行发布并在 go 中观看,反之亦然。
我所说的“不起作用”是指观察者没有被触发。
我正在使用的 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)
}
Run Code Online (Sandbox Code Playgroud)
etcdctl我用来发布/观看的命令:
更新:
no_proxy=10.0.75.1 ETCDCTL_API=3 etcdctl.exe --endpoints=http://10.0.75.1:2379 put /foo "$(date)"
Run Code Online (Sandbox Code Playgroud)
手表:
no_proxy=10.0.75.1 ETCDCTL_API=3 etcdctl.exe --endpoints=http://10.0.75.1:2379 watch /foo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |