go etcd watch
时间: 2023-11-24 10:06:42 浏览: 130
Etcd是一个分布式键值存储系统,可以用于服务发现、配置共享等场景。etcd支持watch机制,可以在某个key的值发生变化时,通知客户端。在Go中,可以使用etcd的clientv3包来实现watch机制。具体操作步骤如下:
1. 导入etcd的clientv3包:
```go
import (
"go.etcd.io/etcd/clientv3"
)
```
2. 创建etcd的client:
```go
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"localhost:2379"},
DialTimeout: 5 * time.Second,
})
if err != nil {
// handle error
}
defer cli.Close()
```
3. 创建一个watcher:
```go
watcher := clientv3.NewWatcher(cli)
```
4. 使用watcher监听某个key的变化:
```go
watcherChan := watcher.Watch(context.Background(), "mykey")
for watchResp := range watcherChan {
for _, evt := range watchResp.Events {
fmt.Printf("Key: %s, Value: %s\n", evt.Kv.Key, evt.Kv.Value)
}
}
```
上述代码中,watchResp是一个WatchResponse类型的变量,表示etcd返回的watch事件列表。遍历watchResp.Events,可以得到每个事件的详细信息,包括key、value、操作类型等。
需要注意的是,watcherChan是一个无限循环的通道,如果没有事件发生,程序会一直阻塞在这里。可以在另一个goroutine中关闭watcherChan来停止监听。
```go
go func() {
time.Sleep(10 * time.Second)
watcher.Close()
}()
```
这样就可以在10秒后关闭watcher,停止监听。
阅读全文