Java Zookeeper检查外部资源的可用性

Java Zookeeper检查外部资源的可用性,java,apache-zookeeper,Java,Apache Zookeeper,我在Tomcat服务器集群上部署了一个Spring应用程序,使用Oracle数据库和JMS服务器(Tibco EMS)作为外部资源 我有一个非功能性的需求来检查DB和JMS服务器是否可用,并在它们停机时通知tomcat集群。(心跳管理) Zookeeper很适合这个要求吗?我可以为这些资源创建短暂的znode,当它们不可用/断开连接时,这些节点将从zookeeper中删除。然后,这些znode上的任何观察者都可以了解这些外部资源的不可用性 这个用例通常使用zookeeper处理吗?如果是,谁会在

我在Tomcat服务器集群上部署了一个Spring应用程序,使用Oracle数据库和JMS服务器(Tibco EMS)作为外部资源

我有一个非功能性的需求来检查DB和JMS服务器是否可用,并在它们停机时通知tomcat集群。(心跳管理)

Zookeeper很适合这个要求吗?我可以为这些资源创建短暂的znode,当它们不可用/断开连接时,这些节点将从zookeeper中删除。然后,这些znode上的任何观察者都可以了解这些外部资源的不可用性

这个用例通常使用zookeeper处理吗?如果是,谁会在zookeeper中为DB和JMS服务器创建这些ZNode

zookeeper或Apache curator中是否有处理外部资源状态要求的方法


如果Zookeeper不适合管理外部资源状态,那么通常如何管理此类外部资源的心跳需求

是的,在动物园管理员的帮助下,这可能是一个很好的解决方案。您的应用程序确实会监视ZK数据树中具有临时节点的部分,并且如果其中任何节点不在那里/发生故障,都能够做出反应

您将遇到的问题是,您的外部资源(如您提到的DB和JMS服务器)必须首先将其临时节点发布到ZK。如果它们是第三方应用程序,而您无法轻松扩展以添加必要的ZK代码,那么这就很难做到。ZK不会在开箱即用的情况下完成这项工作

在这种情况下,常见的方法是创建一个代理/主管应用程序,该应用程序在与外部服务相同的主机上运行,该应用程序监视目标进程并执行ZK通信部分(发布临时节点并保持ZK连接处于活动状态,包括作为ZK协议一部分的心跳)


我建议使用馆长,可能还有一些馆长服务发现食谱。但是,您很可能没有现成的所需功能,并且至少需要编写一些代码来监控/监督您的DB服务器并执行所需的ZK行为。

谢谢您的评论,我一定会看看馆长的发现食谱,看看是否已经为类似的要求编写了任何东西:)