Etcd смотреть разных клиентов
Я борюсь с получением etcd
watch
работа с комбинацией клиентов.
Что работает: я делаю Watch
в golang
клиент и я put
также там. Затем следите за изменением регистра. Если я использую etcdctl
таким же образом, т.е. смотреть / слушать как в командной строке, это также работает.
Что не работает: я публикую из командной строки и смотрю в го или наоборот.
- смотреть командную строку, ставить голанг: не работает
- смотреть командную строку, ставить командную строку: работает
- смотреть голанг, ставить командную строку: не работает
- смотреть голанг, ставить голанг: работает
Я не имею в виду, что наблюдатель не срабатывает.
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