我们看到了zookeeper手表的问题。我们创建一个节点“/ newtest”,意图是在其中添加/修改节点。我们正在关注" / newtest“。我们的观察是,如果添加或删除了孩子,我们会收到通知,但如果孩子被修改,我们就不会收到通知。
以下是zkCli.sh命令的输出
======
[zk:localhost:2181(CONNECTED)21] ls / newtest观看< ===以获取子节点和手表
[1,5,4]< === 1,5,4是子节点
[zk:localhost:2181(CONNECTED)24] set / newtest / 5 hello6 < ===更新节点“5”的数据,没有观看通知
cZxid = 0xc16
ctime = Fri Mar 11 01:03:29 UTC 2016
mZxid = 0xc78
mtime = Fri Mar 11 01:19:48 UTC 2016
pZxid = 0xc16
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
[zk:localhost:2181(CONNECTED)25] create / newtest / 6 hello6 < ===创建新节点
WATCHER ::
创建/ newtest / 6
WatchedEvent状态:SyncConnected类型:NodeChildrenChanged路径:/ newtest < ==观察者通知
[zk:localhost:2181(CONNECTED)26] ls / newtest观看< ===再次观看
[1,6,5,4]
[zk:localhost:2181(CONNECTED)27] set / newtest / 6 hello6 < ==更新节点“6”,无通知
cZxid = 0xc79
ctime = Fri Mar 11 01:19:59 UTC 2016
mZxid = 0xc86
mtime = Fri Mar 11 01:23:18 UTC 2016
pZxid = 0xc79
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
======
请提出解决方案。 Zookeeper版本是zookeeper.version = 3.4.6--1
答案 0 :(得分:0)
我建议不要将zkCli.sh用于除测试和小/快速操作之外的任何其他操作。如果您想在修改子节点时收到通知,我建议您使用Apache Curator在Java中编写自己的观察者,更具体地说,使用Tree Cache编写自己的观察者。