账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    ZkClient 事件监听器的疑问
    46
    0
    public static void main(String[] args) throws Exception {
        ZkClient zkClient = new ZkClient("127.0.0.1:2181", 5000);
        
        zkClient.createEphemeral("/zkclient");
        zkClient.subscribeDataChanges("/zkclient", new IZkDataListener() {            
            @Override
            public void handleDataDeleted(String dataPath) throws Exception {
                System.out.println(String.format("The node '%s' is deleted.", dataPath));
            }
            @Override
            public void handleDataChange(String dataPath, Object data) throws Exception {
                System.out.println(String.format("The node '%s' is changed, now its data is '%s'.", dataPath, data));
            }
        });
        
        zkClient.writeData("/zkclient", "hello world");
        Thread.sleep(1000);
        zkClient.delete("/zkclient");
        Thread.sleep(1000);
        
        zkClient.close();
    }

    这段代码输出的内容是:

    The node '/zkclient' is changed, now its data is 'hello world'.
    The node '/zkclient' is deleted.
    public static void main(String[] args) throws Exception {
        ZkClient zkClient = new ZkClient("127.0.0.1:2181", 5000);
        
        zkClient.createEphemeral("/zkclient");
        zkClient.subscribeDataChanges("/zkclient", new IZkDataListener() {            
            @Override
            public void handleDataDeleted(String dataPath) throws Exception {
                System.out.println(String.format("The node '%s' is deleted.", dataPath));
            }
            @Override
            public void handleDataChange(String dataPath, Object data) throws Exception {
                System.out.println(String.format("The node '%s' is changed, now its data is '%s'.", dataPath, data));
            }
        });
        
        zkClient.writeData("/zkclient", "hello world");
        zkClient.delete("/zkclient");
        Thread.sleep(1000);
        
        zkClient.close();
    }

    这段代码的输出内容却是:

    The node '/zkclient' is deleted.
    The node '/zkclient' is deleted.

    为什么会接收到两次删除节点事件?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 运动的胖子 普通会员 1楼

      ZkClient 是一个Java实现的开源 ZooKeeper 服务器客户端,它提供了一种简洁的方式来实现与 ZooKeeper 服务器的交互。在使用 ZkClient 时,我们通常需要处理一些事件,如连接建立、断开、节点删除、节点状态改变等。但是,ZkClient 事件监听器的具体实现方式并不清楚,可能会有以下几种情况:

      1. 不清楚 ZkClient 事件监听器的命名空间是什么。每个节点在 ZkClient 中都有一个唯一的标识符,通常在 ZkClient 的类名中使用。如果你不确定这个标识符,你可能需要使用 org.apache.zookeeper.server.util.ZKEventUtils 类来获取当前的命名空间。

      2. 不清楚 ZkClient 事件监听器的事件是如何定义的。ZkClient 事件是客户端与 ZooKeeper 服务器进行交互时产生的,通常包括连接建立、断开、节点删除、节点状态改变等事件。如果你不清楚这些事件是如何定义的,你可能需要查阅 ZkClient 的官方文档或使用 ZKEventUtils 类来获取当前的事件定义。

      3. 不清楚 ZkClient 事件监听器的事件处理代码在哪里。ZkClient 事件监听器通常是在一个单独的类中定义的,而不是在与 ZkClient 交互的地方。如果你不清楚这些事件处理代码在哪里,你可能需要查阅 ZkClient 的官方文档或使用 ZKEventUtils 类来获取当前的事件处理代码。

      以上都是可能的情况,具体的问题可能需要查阅 ZkClient 的官方文档或使用 ZKEventUtils 类来获取。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部