一架梯子,一头程序猿,仰望星空!

Go etcd watch监控数据


etcd的核心特性之一,就是我们可以监控key的数据变化,只要有人修改了key的值,我们都可以监控到变化的值。

监控指定Key

cli, err := clientv3.New(...忽略...)
if err != nil {
    log.Fatal(err)
}
defer cli.Close()

// 监控key=/tizi 的值
rch := cli.Watch(context.Background(), "/tizi")
// 通过channel遍历key的值的变化
for wresp := range rch {
    for _, ev := range wresp.Events {
        fmt.Printf("%s %q : %q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
    }
}

提示,具体如何连接etcd请参考, 连接etcd章节

根据key前缀监控一组key的值

cli, err := clientv3.New(...忽略...)
if err != nil {
    log.Fatal(err)
}
defer cli.Close()

// 监控以/tizi为前缀的所有key的值
rch := cli.Watch(context.Background(), "/tizi", clientv3.WithPrefix())
// 通过channel遍历key的值的变化
for wresp := range rch {
    for _, ev := range wresp.Events {
        fmt.Printf("%s %q : %q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
    }
}