9. 使用ZooKeeper Java API编程 (6)

如前面的示例所示,看到来自客户端API的调试日志消息,最后,ClusterMonitor类开始监视事件,输入如下内容:

ClusterMonitor类输出

现在,执行ClusterClient类的五个实例来模拟一个集群的五个节点。ClusterClient在ZooKeeper树的/Members路径中使用自己的进程ID创建ephemeral znode:

$ java -cp $CLASSPATH ClusterClient localhost:2181 2>&1>/dev/null & [1] 4028 $ java -cp $CLASSPATH ClusterClient localhost:2181 2>&1>/dev/null & [2] 4045 $ java -cp $CLASSPATH ClusterClient localhost:2181 2>&1>/dev/null & [3] 4057 $ java -cp $CLASSPATH ClusterClient localhost:2181 2>&1>/dev/null & [4] 4072 $ java -cp $CLASSPATH ClusterClient localhost:2181 2>&1>/dev/null & [5] 4084

与此相对应,将观察到ClusterMonitor类检测到这些新的ClusterClient类实例,因为它正在监视ZooKeeper树的/Members路径上的事件。 这模拟了一个真正的集群中的节点加入事件。 可以在ClusterMonitor类的终端中看到输出,这与下面的截图中显示的类似:

监视事件

现在,如果杀死一个ClusterClient.java进程,那么它与ZooKeeper服务器一起维护的会话将被终止。因此,客户端创建的ephemeral znode将被删除。删除将触发NodeChildrenChanged事件,该事件将被ClusterMonitor类捕获。该模拟在集群中一个节点离开的场景。

让我们用ID 4084终止ClusterClient进程:

$ kill -9 4084

以下屏幕截图显示了ClusterMonitor类的终端中的输出。 它列出了当前可用的进程及其进程ID,这些进程ID模拟了实时服务器:

可用进程

上面的简单而优雅的集群监控模型的示例实现展示了ZooKeeper的真正威力。 在没有ZooKeeper的情况下,开发这样一个能够实时监控节点活跃度的模型将是一项真正的艰巨任务。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspwsy.html