【发布时间】:2020-12-16 14:19:42
【问题描述】:
我有/math 是根节点(在这两个进程中都设置了Watcher)。我在进程A中创建子节点math/exam01,并在进程B中创建子节点math/exam02(在创建子math/exam01之后)。我希望事件线程将由进程 A 中的 Watcher 触发。但是什么也没有发生,能解释一下这是怎么回事吗?
【问题讨论】:
标签: spring-boot apache-zookeeper
我有/math 是根节点(在这两个进程中都设置了Watcher)。我在进程A中创建子节点math/exam01,并在进程B中创建子节点math/exam02(在创建子math/exam01之后)。我希望事件线程将由进程 A 中的 Watcher 触发。但是什么也没有发生,能解释一下这是怎么回事吗?
【问题讨论】:
标签: spring-boot apache-zookeeper
我会尽量关注你的问题:
在进程 A 中,您在现有 znode /math 上设置了一个监视。此 watch 用于观察与 /math 的子 znode 相关的事件,因此您应该使用以下命令设置它们:
[PROCESS A]: ls -w /math
然后,您使用来自进程 A 的客户端为 /math/exam01 路径创建一个子节点,使用以下命令:
[PROCESS A]: create /math/exam01
您刚刚创建了/math 的子节点,因此您触发了事件Watch。
然后您使用进程 B 中的客户端在 /math/exam02 处创建 /math 的新子节点。此操作不会触发进程 A 中的任何 Watch 事件,因为触发器是一次性。如果您需要发送事件,在进程A中第一个事件触发后,您应该重新设置/math的手表。
更多关于 ZooKeeper 手表的信息here。
【讨论】: