watch机制相关

来源:7-8 curator之PathChildrenCache子节点监听

慕粉1124262302

2018-10-02

childrenCache.start(StartMode.POST_INITIALIZED_EVENT);
	
	List<ChildData> childDataList = childrenCache.getCurrentData();
	System.out.println("当前数据节点的子节点数据列表:");
	for (ChildData cd : childDataList) {
		String childData = new String(cd.getData());
		System.out.println(childData);
	}
	
	childrenCache.getListenable().addListener(new PathChildrenCacheListener() {
		public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
			if(event.getType().equals(PathChildrenCacheEvent.Type.INITIALIZED)){
				System.out.println("子节点初始化ok...");
			}
			
			else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_ADDED)){
				String path = event.getData().getPath();
				if (path.equals(ADD_PATH)) {
					System.out.println("添加子节点:" + event.getData().getPath());
					System.out.println("子节点数据:" + new String(event.getData().getData()));
				} else if (path.equals("/super/imooc/e")) {
					System.out.println("添加不正确...");
				}
				
			}else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_REMOVED)){
				System.out.println("删除子节点:" + event.getData().getPath());
			}else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){
				System.out.println("修改子节点路径:" + event.getData().getPath());
				System.out.println("修改子节点数据:" + new String(event.getData().getData()));
			}
		}
	});
	
	Thread.sleep(10000000);

这段代码关于watch监听是内部是怎么实现的呢?这是一个主线程,执行到了Thread.sleep语句,主线程应该挂起了,为什么还能监听呢,是不是watch事件有注册到其他异步线程中?

写回答

1回答

风间影月

2018-10-02

他其实是一种异步回调机制,和netty封装的nio异步事件通知类似

1
5
慕粉1124262302
回复
风间影月
谢谢老师解惑
2018-10-02
共5条回复

ZK分布式专题与Dubbo微服务入门,成长与加薪必备

进阶中高级工程师必备技能,大数据与微服务最常用的中间件

1859 学习 · 321 问题

查看课程