如何使用Zookeeper监视在不同计算机上运行的Java独立应用程序的状态?如果任何Java应用程序未运行/关闭/终止,则应发送通知或触发某些事件。

例如:我的Java程序(Sample.java)在机器A,B,C上以nohup模式运行,无论如何,该程序在机器A上被杀死。我们如何知道机器A上的程序被关闭/被杀死。任何想法都会有所帮助。

最佳答案

我建议阅读Apache ZooKeeper文档的一些特定部分:

Ephemeral Nodes:一个进程可以创建一个临时的znode,如果该znode无法维持其ZooKeeper会话,例如该进程异常终止,则该znode将被自动删除。

Group Membership:这描述了使用临时znodes实现组成员身份的方法。父znode充当代表组的容器,并且每个单独的进程在该父znode下创建一个临时znode。由于临时znode会在进程死亡时自动删除,因此父znode下的当前子级列表可以准确地表示当前活动的进程列表。

ZooKeeper Watches:监视应用程序可以使用ZooKeeper API在代表该组的父znode上设置监视。在父节点下创建或删除新的子znode时,它将收到通知。监视应用程序可能在回调中具有逻辑,以便在删除进程的临时znode时触发警报(发送电子邮件,在Web UI中从绿色切换为红色等)。

此外,与直接调用ZooKeeper API相比,您可能会发现Apache Curator项目作为实用程序API很有用。策展人的Group Member配方可能很适合您的需求。

10-05 22:39