🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> ### Zookeeper ~~~ package main import ( "github.com/samuel/go-zookeeper/zk" "time" "fmt" ) var conn *zk.Conn func callback(event zk.Event) { //fmt.Println("*******************") //fmt.Println("path:", event.Path) //fmt.Println("type:", event.Type.String()) //fmt.Println("state:", event.State.String()) //fmt.Println("-------------------") } func init() { servers := []string{"192.168.1.170:2181", "192.168.1.171:2181", "192.168.1.172:2181"} option := zk.WithEventCallback(callback) var err error if conn, _, err = zk.Connect(servers, time.Second*5, option); err != nil { fmt.Println(err) return } } /** path 节点 data 节点数据 flags有4种取值: 0:永久,除非手动删除 zk.FlagEphemeral = 1:短暂,session断开则改节点也被删除 zk.FlagSequence = 2:会自动在节点后面添加序号 3:Ephemeral和Sequence,即,短暂且自动添加序号 */ func zkCreate(path string, data []byte, flags int32, ) { p, err := conn.Create(path, data, flags, zk.WorldACL(zk.PermAll)) if err != nil { fmt.Println(err) } fmt.Println(p) } func zkGet(path string) { b, stat, err := conn.Get(path) if err != nil { fmt.Println(err) } fmt.Println("节点数据:", string(b)) fmt.Println("节点信息", stat.Czxid, stat.Version) } func zkSet(path string, data []byte) { _, stat, err := conn.Get(path) if err != nil { fmt.Println(err) } stat, err = conn.Set(path, data, stat.Version) if err != nil { fmt.Println(err) } fmt.Println(stat) } func zkDelete(path string, version int32) { if version == -1 { _, stat, err := conn.Get(path) if err != nil { fmt.Println(err) } version = stat.Version } if err := conn.Delete(path, version); err != nil { fmt.Println(err) } else { fmt.Println("Delete OK") } } func zkListenOne(path string) { //调用conn.ExistsW(path) 或GetW(path)为对应节点设置监听,该监听只生效一次 _, _, _, err := conn.ExistsW(path) if err != nil { fmt.Println(err) return } } func zkListenOneChannel(path string) { _, _, ch, err := conn.ExistsW(path) if err != nil { fmt.Println(err) return } go func() { event := <-ch fmt.Println("*******************") fmt.Println("path:", event.Path) fmt.Println("type:", event.Type.String()) fmt.Println("state:", event.State.String()) fmt.Println("-------------------") }() } func main() { //TODO : 监听事件(只生效一次) //zkListenOne("/data") //TODO : 创建节点 zkCreate("/data", []byte("123456"), 0) //TODO : 往节点添加数据 zkSet("/data", []byte("b3")) //TODO : 开启一个协程处理chanel中传来的event事件 //zkListenOneChannel("/data") //TODO : 删除节点 zkDelete("/data", -1) //TODO : 获取节点数据 zkGet("/data") } ~~~ * * * > ### 相关阅读 * [随笔分类 - Zookeeper](https://www.cnblogs.com/wuxl360/category/874409.html) * [Zookeeper Golang客户端:go-zookeeper的基本使用](https://blog.csdn.net/zhaominpro/article/details/77543543)