策展人框架不允许我检查连接

问题描述 投票:0回答:2

我正在检查CuratorFramework实例的连接,当我在调试模式下它传递正常时,但是当我在运行模式下它会通过验证,考虑到条件为false。

    curatorFramework.getZookeeperClient().isConnected();

代码有问题吗?这是我创建实例的方式:

    RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 1);
    CuratorFramework curatorFramework= CuratorFrameworkFactory.newClient(host, retryPolicy);
    curatorFramework.start();
frameworks apache-zookeeper apache-curator
2个回答
1
投票

我无法发现任何明显错误的代码,但是,我建议尝试使用CuratorFrameworkFactory构建您的CuratorFramework实例,如下所示:

String connectionString = ....

CuratorFramework client = CuratorFrameworkFactory.builder()
        .namespace("my_namespace")
        .connectString(connectionString )
        .retryPolicy(new ExponentialBackoffRetry(1000, 1))
        .build();

client.start();

我还建议使用Curator的内置TestingServer测试您的代码,以确保问题不在于您目前正在测试的ZK群集。要设置并连接到Curator测试服务器,只需使用以下内容:

TestingServer zkTestServer = new TestingServer(31313);

CuratorFramework client = CuratorFrameworkFactory.builder()
        .namespace("my_namespace")
        .connectString(zkTestServer.getConnectString())
        .retryPolicy(new ExponentialBackoffRetry(1000, 1))
        .build();

client.start();

0
投票

你应该在使用curatorFramework.blockUntilConnected()启动curatorFramework后连接到zk,然后获取客户端并检查连接状态。有点喜欢以下内容:

    ...
    curatorFramework.start();

    try {
        curatorFramework.blockUntilConnected(3, TimeUnit.SECONDS);
        if (curatorFramework.getZookeeperClient().isConnected()) {
            System.out.println(curatorFramework.getState());
            return;
        }
    } catch (InterruptedException ignored) {
        Thread.currentThread().interrupt();
    }
    ...
© www.soinside.com 2019 - 2024. All rights reserved.