前言
zookeeper 是开放源码的分布式应用程序协调服务
常用来做服务发现
使用 go-zookeeper/zk 类库
github地址:https://github.com/go-zookeeper/zk
安装
go get github.com/go-zookeeper/zk
启动zookeeper
这里使用docker启动zookeeper
docker run --name zk -p 2181:2181 --restart always -d zookeeper
zookeeper常用方法
连接
// 传入zookeeper地址map,超时时间
// 返回
// connect: 连接
// enents: 事件chan
connect, events, err := zk.Connect([]string{"127.0.0.1"}, 5*time.Second)
判断节点是否存在
//传入节点路径
//返回
//exists:节点是否存在(bool)
//stat: 节点信息描述(struct)
exists, stat, err := connect.Exists(path)
新增节点
//传入创建的节点路径,节点数据,节点类型,权限
// 返回
// name:节点名
name, err := connect.Create(path, []byte(data), 0, zk.WorldACL(zk.PermAll))
获取节点信息
//传入节点路径
//返回
//get:节点数据([]byte)
//stat: 节点描述信息(struct)
get, stat, err := connect.Get(path)
删除节点信息
//传入要删除的节点路径,节点版本号(从节点描述信息stat中获取)
err := connect.Delete(path, version)
获取子节点
// 传入上级路径
// 返回
// children: 上级路径下的子节点路径(不包含上级path部分)
// stat: 上级节点描述信息(struct)
children, stat, err := connect.Children(path)
监听子节点变化
//传入主节点路径
//返回
//w:主节点下的子节点组成的(string[])
//stat:主节点信息描述(struct)
//事件chan
w, stat, event, err := z.connect.ChildrenW(path)
修改节点
//传入要修改的节点路径,修改数据,版本号(从节点描述信息stat中获取)
//返回
//stat:修改后的节点描述信息(struct)
stat,err := connect.Set(path, data, version)