测试代码

func Test_watch(t *testing.T) {ec, _ := NewEtcdClient([]string{"http://127.0.0.1:2379"})cli := ec.getEtcdAPI()go func() {watcher := cli.Watcher("/a", &client.WatcherOptions{Recursive: true,})for {resp, err := watcher.Next(context.Background())fmt.Println(resp)fmt.Println(err)}}()cli.Set(context.Background(), "/a/b", "a-b", &client.SetOptions{})time.Sleep(1 * time.Second)cli.Set(context.Background(), "/a/b/c", "a-b-c", &client.SetOptions{})time.Sleep(1 * time.Second)cli.Set(context.Background(), "/a/d", "a-d", &client.SetOptions{})time.Sleep(1 * time.Second)cli.Delete(context.Background(), "/a/b/c", &client.DeleteOptions{})time.Sleep(1 * time.Second)cli.Delete(context.Background(), "/a/b", &client.DeleteOptions{})time.Sleep(1 * time.Second)
}

结果是

{"action":"set","node":{"key":"/a/b","value":"a-b","modifiedIndex":479128,"createdIndex":479128},"prevNode":{"key":"/a/b","value":"a-b","modifiedIndex":479126,"createdIndex":479126}}
&{set {Key: /a/b, CreatedIndex: 479128, ModifiedIndex: 479128, TTL: 0} {Key: /a/b, CreatedIndex: 479126, ModifiedIndex: 479126, TTL: 0} 479127}
<nil>{"action":"set","node":{"key":"/a/d","value":"a-d","modifiedIndex":479129,"createdIndex":479129},"prevNode":{"key":"/a/d","value":"a-d","modifiedIndex":479127,"createdIndex":479127}}
&{set {Key: /a/d, CreatedIndex: 479129, ModifiedIndex: 479129, TTL: 0} {Key: /a/d, CreatedIndex: 479127, ModifiedIndex: 479127, TTL: 0} 479128}
<nil>{"action":"delete","node":{"key":"/a/b","modifiedIndex":479130,"createdIndex":479128},"prevNode":{"key":"/a/b","value":"a-b","modifiedIndex":479128,"createdIndex":479128}}
&{delete {Key: /a/b, CreatedIndex: 479128, ModifiedIndex: 479130, TTL: 0} {Key: /a/b, CreatedIndex: 479128, ModifiedIndex: 479128, TTL: 0} 479129}
<nil>

结论是

  • etcd 的 directory 类型节点可以通过设置recursive=True,watch其直接儿子的新增和删除

  • 孙子节点的新增和删除无法被感知

  • 没有加recursive=True无法感知其儿子的新增和删除

  • 新增和删除的节点会在watch消息里给出,无需再去用get拉取内容。也就是watch给的是类似binlog的增量同步消息

  • 依赖watch来增量同步,需要保证watch不丢掉中间改动。这个可以通过WatcherOptions上的AfterIndex属性来实现,Index就是etcd node的版本。etcd v2 只有节点级别的版本,v3 才有全仓库的版本。

学习 etcd watch api相关推荐

  1. 初学api测试_面向初学者的API-在此免费视频课程中学习如何使用API

    初学api测试 What exactly is an API? How do you use an API? We've just published a full beginner's course ...

  2. TF学习——TF之API:TensorFlow的高级机器学习API—tf.contrib.learn的简介、使用方法、案例应用之详细攻略

    TF学习--TF之API:TensorFlow的高级机器学习API-tf.contrib.learn的简介.使用方法.案例应用之详细攻略 目录 tf.contrib.learn的简介 tf.contr ...

  3. 用于Java开发机器学习和深度学习的Vector API(翻译)

    本文介绍了用于Java开发机器学习和深度学习的Vector API 英语原文链接 https://software.intel.com/en-us/articles/vector-api-develo ...

  4. es入门学习7-java-es自身API

    es入门学习7-java-es自身API 使用起前面的集群环境进行学习 一. 公共的东西 1.1.项目位置 1.2.导入依赖 <dependency><groupId>org. ...

  5. 微信小程序学习总结(六) --- API

    微信小程序学习总结(六) - API API 规则: 1 . 都是以wx.开头 2. 以wx.on开头的是监听某个事件的API接口,接受一个回调函数作为参数 3. api大多是异步的函数,接受Obje ...

  6. 分布式学习(7)etcd@3@ API v3 gRPC_事务,租约

    一.ETCD 之 事务 在etcdv3中,事务就是一个原子的.针对key-value存储操作的If / Then / Else 结构,事务提供了一个原语,用于请求归并到一起放在原子块中,例如then/ ...

  7. 分布式学习(6)etcd@3@ API v3 gRPC_range,put,deleterange

    1 gRPC Services  发送到etcd服务器的每个API请求都是一个gRPC. 在etcd3中的RPCs会根据功能分类到不同的service中. 1.1 Services important ...

  8. 国内使用dropbox_通过创建费用管理器来学习使用Dropbox API

    国内使用dropbox Learn how to build an expense organizer with the Dropbox API and JavaScript ES6! 了解如何使用D ...

  9. 【Linux网络编程学习】socket API(socket、bind、listen、accept、connect)及简单应用

    此为牛客Linux C++课程和黑马Linux系统编程笔记. 1. 什么是socket 所谓 socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. 一个套接字就是网络 ...

最新文章

  1. 如何从0到1构建一个稳定、高性能的Redis集群?(附16张图解)
  2. javaScript中表单的验证
  3. 2019年9月全国计算机等级考试报名,关于2019年9月全国计算机等级考试报名的通知...
  4. 【学习笔记】数据链路层——轮询访问介质控制(轮询协议、令牌传递协议)
  5. sublimetext3插件安装_sublime text 3 交互python
  6. 个人博客 V0.0.3 版本 ...
  7. 用安卓手机看epub小说,哪些阅读器APP更好用?
  8. SpringBoot 3.0最低版本要求的JDK 17,这几个新特性不能不知道
  9. 图书馆座位预约系统管理/基于微信小程序的图书馆座位预约系统
  10. Android 游戏引擎libgdx之Box2D Hello Box2D
  11. linux系统子接口配置文件,linux配置子接口
  12. 土壤湿度检测仪c语言代码,单片机测土壤湿度可自动浇水并报警 带C#上位机源码...
  13. C++jump game跳跃游戏的算法(附完整源码)
  14. 两行代码隐藏进程在top中的显示
  15. Operator(运算符)
  16. 进阶技术 - 如何实现跨进程传递大图?(腾讯面试题)
  17. 使用tdd构建golang Web 应用(4)
  18. Javaweb安全——反序列化漏洞-CC3链
  19. 锐捷无线ap服务器怎么绑定mac,锐捷无线ap配置命令教程
  20. 中润光学在科创板IPO过会:拟募资4亿元,张平华为实际控制人

热门文章

  1. 弹出框之对话框和提示框,可共用代码
  2. ECMAScript中基本类型和引用类型的值在复制变量值时的区别
  3. 操作系统复习笔记(二)
  4. JS高级程序设计2nd部分知识要点3
  5. PeopleTools 8.54 first install note
  6. _GNUC__宏函数
  7. 仿函数适配器(mem_fun/mem_fun_ref)
  8. 华为 该软件被检测为风险软件_美团被华为标记为“病毒软件”,用户表示懵了,华为官方出面解释...
  9. winform checkbox要点击两次_真正牛X的人生,必须经历两次失败!(深度)
  10. 【论文写作】JSP旅游网如何写总体设计