ZooKeeper 笔记(2) 监听数据变化
来源:互联网 发布:php正则表达式语法 编辑:程序博客网 时间:2024/06/03 23:34
原文出自:http://www.cnblogs.com/yjmyzz/p/4604864.html
ZK中的每个节点都可以存储一些轻量级的数据,这些数据的变化会同步到集群中的其它机器。在应用中程序员可以添加watcher来监听这些数据的变化,watcher只会触发一次,所以触发过后想要继续监听,必须再手动设置监听,这比较麻烦,好在ZkClient已经做了一些增强,在watcher的基础上,封装了所谓的Listener,开发人员只需要订阅Listener即可。
package
yjmyzz.test;
import
com.cnblogs.yjmyzz.domain.BaseBean;
import
org.I0Itec.zkclient.IZkDataListener;
import
org.I0Itec.zkclient.ZkClient;
import
org.junit.After;
import
org.junit.Before;
import
org.junit.Test;
import
java.util.concurrent.TimeUnit;
public
class
ZKTest
extends
BaseBean {
private
ZkClient zk;
private
String nodeName =
"/myApp"
;
@Before
public
void
initTest() {
super
.setLoggerClass(
this
.getClass());
zk =
new
ZkClient(
"localhost:2181,localhost:2182,localhost:2183"
);
}
@After
public
void
dispose() {
zk.close();
logger.info(
"zkclient closed!"
);
}
@Test
public
void
testListener()
throws
InterruptedException {
//监听指定节点的数据变化
zk.subscribeDataChanges(nodeName,
new
IZkDataListener() {
@Override
public
void
handleDataChange(String s, Object o)
throws
Exception {
logger.info(
"node data changed!"
);
logger.info(
"node=>"
+ s);
logger.info(
"data=>"
+ o);
logger.info(
"--------------"
);
}
@Override
public
void
handleDataDeleted(String s)
throws
Exception {
logger.info(
"node data deleted!"
);
logger.info(
"s=>"
+ s);
logger.info(
"--------------"
);
}
});
logger.info(
"ready!"
);
//junit测试时,防止线程退出
while
(
true
) {
TimeUnit.SECONDS.sleep(
5
);
}
}
@Test
public
void
testUpdateConfig()
throws
InterruptedException {
if
(!zk.exists(nodeName)) {
zk.createPersistent(nodeName);
}
zk.writeData(nodeName,
"1"
);
zk.writeData(nodeName,
"2"
);
zk.delete(nodeName);
zk.delete(nodeName);
//删除一个不存在的node,并不会报错
}
}
上面的代码中,演示了如何监听/myApp的数据变化,用junit做单元测试时,步骤如下:
1. 先测试testListener()方法,由于这个方法最后,写了一个死循环,所以程序不会退出。
2. 紧接着再测试testUpdateConfig(),这个方法中修改了节点的数据。
此时,由于testListener中设置了监听,所以监听程序应该会起作用,打印出相应的数据变化,类似下面的效果:
yjmyzz.test.ZKTest - ready!
yjmyzz.test.ZKTest - node data changed!
yjmyzz.test.ZKTest - node=>/myApp
yjmyzz.test.ZKTest - data=>1
yjmyzz.test.ZKTest - --------------
yjmyzz.test.ZKTest - node data changed!
yjmyzz.test.ZKTest - node=>/myApp
yjmyzz.test.ZKTest - data=>2
yjmyzz.test.ZKTest - --------------
yjmyzz.test.ZKTest - node data deleted!
yjmyzz.test.ZKTest - s=>/myApp
yjmyzz.test.ZKTest - --------------
yjmyzz.test.ZKTest - node data deleted!
yjmyzz.test.ZKTest - s=>/myApp
yjmyzz.test.ZKTest - --------------
- ZooKeeper 笔记(2) 监听数据变化
- ContentProvider 监听数据变化
- ContentProvider监听数据变化
- Vue监听数据变化
- Curator实现zookeeper路径变化监听(节点变化监听)
- zookeeper的watcher监听不到zk后续数据的变化问题
- zookeeper路径信息变化(节点信息变化)监听实现
- ContentObserver监听ContentProvider数据变化
- 赵雅智_ProviderContent监听数据变化
- android数据库数据变化监听
- 监听ContentProvider的数据变化
- 监听contentprovider中数据变化
- [Android] ContentObserver监听数据变化
- 表单取消监听数据变化
- Vue之监听数据变化
- Android学习笔记---监听ContentProvider(内容共享者)中数据的变化
- android基础笔记——监听数据变化,即时更新ListView:adapter.notifyDataSetChanged();
- Android 监听ContentProvider中数据的变化
- bzoj1443[game] 二分图
- Android Volley完全解析(二),使用Volley加载网络图片
- Sha Function
- 第二天 XML SD卡 SharedPreferences
- 将模块service化的好处
- ZooKeeper 笔记(2) 监听数据变化
- java-swing-皮肤
- php中使用exec,system等函数调用系统命令
- Android学习笔记(一)
- Java IO详解
- bzoj 1803(主席树)
- ClassLoader:类加载详解
- Android开发系列(十一):对手机通讯录的读取、添加、删除、查找
- pat 1067 Sort with Swap(0,*) (25)