问题描述
我有/math
是根节点(在两个进程中都对此设置了Watcher)。我在进程A中创建子节点math/exam01
,并在进程B中创建子节点math/exam02
(在创建子math/exam01
之后)。我希望事件线程将由进程A中的Watcher触发。但是什么也没发生,可以解释一下这是怎么回事?
解决方法
我将尝试关注您的问题:
在过程A中,您在现有znode /math
上设置了手表。该手表将观察与/math
的子znode相关的事件,因此您应该使用以下命令进行设置:
[PROCESS A]: ls -w /math
然后,使用以下命令,使用进程A的客户端为/math/exam01
路径创建子节点:
[PROCESS A]: create /math/exam01
您刚刚创建了/math
的子节点,所以您触发了事件Watch。
然后,您使用流程B中的客户端在/math
处创建/math/exam02
的新子节点。此操作不会触发进程A中的任何Watch事件,因为触发是一次性。如果您需要发送事件,则在进程A的第一个事件触发之后,您应该为/math
重置手表。
有关ZooKeeper手表here的更多信息。