java zookeeper监控_Zookeeper 监控节点

原理

利用Znode临时节点的创建、删除的特性

客户端活跃时,临时节点就是有效的。当客户端与ZooKeeper集合断开连接时,临时节点会自动删除

java zookeeper监控_Zookeeper 监控节点_第1张图片

步骤

watcher监控端创建一个永久型的Znode,并注册这个node的子节点变更事件。

service服务端创建临时性子节点

代码

依赖包:

Netflix/curator,基于Zookeeper的二次封装,提供了可用性更好的API和链式调用,可以方便的监控子节点的变更,事件注册只需要注册一次。4.0版本支持zookeeper3.4.X

org.apache.curator

curator-recipes

4.0.0

org.apache.zookeeper

zookeeper

监控端

//创建客户端连接

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);

CuratorFramework client1 = CuratorFrameworkFactory.builder().connectString(hostPort)

.sessionTimeoutMs(5000)//会话超时时间

.connectionTimeoutMs(5000)//连接超时时间

.retryPolicy(retryPolicy)

.build();

client1.start();

//创建节点

try {

client1.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)

.forPath(pnode);

} catch (Exception e) {

e.printStackTrace();

}

//注册子节点的监听事件

final PathChildrenCache childrenCache = new PathChildrenCache(client1,pnode,true);

childrenCache.start();

childrenCache.getListenable().addListener(new PathChildrenCacheListener() {

@Override

public void childEvent(CuratorFramework curatorFramework, PathChildrenCacheEvent event) throws Exception {

log.info("childEvent:{}", JSON.toJSONString(event));

}

});

服务端(被监控端)

zooKeeper = new ZooKeeper(hostPort,3000,this);

Stat stat = zooKeeper.exists(znode,false);//创建节点,但并不监控

if(stat==null){

zooKeeper.create(znode,null, ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);

}

你可能感兴趣的:(java,zookeeper监控)