Go语言:zkutils模块实现对zookeeper节点的无限循环监听

本文介绍ZooKeeper在服务注册监听和集中配置中心的应用,以及zkutils工具模块中KeepWatcher类如何实现对节点变化的无限循环监听。通过示例代码展示了如何监听子节点列表和节点数据的变化。

zookeeper(zk)有两个重要的应用场景,一是用于服务的注册与监听,服务消费方需要保持对服务节点列表的持续监听;二是用于集群的集中配置中心,应用服务如果需要支持动态可配的话则需要保持对节点内容的持续监听。

zkutils是面向go-zookeeper的工具模块。KeepWatcher类实现了对节点的无限循环监听,包括两个方法:

1)当path下的节点发生变化时,监听函数listener会被调用,传入参数是子节点名称数组和error。

WatchChildren(path string, listener func(children []string, err error)) 

 2)当path的存储数据发生变化时,监听函数listener会被调用,传入参数是新的数据和error。

WatchData(path string, listener func(data []byte, err error))

 使用示例:

package main

import (
	"fmt"
	"github.com/pochard/zkutils"
	"github.com/samuel/go-zookeeper/zk"
	"net/http"
	"strings"
	"time"
)

func handler(w http.ResponseWriter, r *http.Request) {
}

func main() {
	var hosts = []string{"localhost:2181"}
	conn, _, _ := zk.Connect(hosts, time.Second*5)
	defer conn.Close()

	path := "/hades/services/main/cms"
	keepWatcher := zkutils.NewKeepWatcher(conn)
	go keepWatcher.WatchChildren(path, func(children []string, err error) {
		if err != nil {
			fmt.Println(err)
			return
		}
		fmt.Printf("%s\n", strings.Join(children, ","))
	})

	path = "/hades/configs/main/cms/config"
	go keepWatcher.WatchData(path, func(data []byte, err error) {
		if err != nil {
			fmt.Println(err)
			return
		}
		fmt.Printf("%s\n", string(data))
	})

	http.HandleFunc("/", handler)
	http.ListenAndServe(":8081", nil)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值