如何以编程方式检查Zookeeper是否正在运行?
问题描述:
我使用CuratorFramework(我还是一个新手)为了连接到一个Zookeeper实例。我想导入一个配置,但在此之前我想测试我的程序能够连接到Zookeeper。到目前为止,我有这样的事情:如何以编程方式检查Zookeeper是否正在运行?
public Boolean zookeeperRunning() {
CuratorFramework curatorFramework =
CuratorFrameworkFactory.newClient(zookeeperConn, new RetryOneTime(1));
curatorFramework.start();
CuratorZookeeperClient zkClient = curatorFramework.getZookeeperClient();
return zkClient.isConnected();
}
我已经在我的本地计算机上启动的ZooKeeper和我检查与zkCli连接,客户端能够连接到它。 zookeeperCon变量设置为“127.0.0.1:2181”(我也尝试使用localhost:2181)。问题是,尽管zkServer运行正常,但上述方法总是返回false。最有可能的是,语法不正确,但我无法在网上找到解决方案。你能帮我解释为什么上面的代码找不到正在运行的zkServer吗?
答
可以使用Builder创建一个配置的客户端和安装监听器来监控您的ZK实例的状态:
// start client
client = CuratorFrameworkFactory.builder()
.connectString("localhost:2181")
.retryPolicy(new ExponentialBackoffRetry(1000, 3))
.namespace("heavenize")
.build();
client.getConnectionStateListenable().addListener(new ConnectionStateListener() {
@Override
public void stateChanged(CuratorFramework client, ConnectionState newState)
{
log.info("State changed to: "+newState);
}
});
}
很抱歉,如果我的问题是愚蠢的,但上面的方法如何返回boolean变量?我希望我的方法具有以下签名:“public Boolean zookeeperRunning(){}” – 2014-10-31 15:20:43
每次调用stateChanged并从getZKState()返回时,都可以设置全局布尔标志。 – bachr 2014-10-31 15:32:18