ZooKeeper、CuratorFramework、Watcher、ConnectionStateListener

ZooKeeper

Zookeeper的作用是提供一个分布式的协调服务,它可以让分布式系统中的各个节点之间进行通信和协调,从而保证整个系统的一致性和可靠性。Zookeeper的核心是一个分布式的文件系统,它可以存储和管理分布式系统中的各种信息,如配置信息、元数据、状态信息等。

常用的Zookeeper API包括:

1. 创建节点:create()
2. 获取节点数据:getData()
3. 设置节点数据:setData()
4. 删除节点:delete()
5. 判断节点是否存在:exists()
6. 获取子节点列表:getChildren()
7. 监听节点变化:Watcher机制

CuratorFramework

CuratorFramework是一个ZooKeeper客户端框架,它封装了ZooKeeper API,提供了更加简单易用的接口,同时也提供了一些高级特性,如分布式锁、选举等。

CuratorFramework常用方法包括:

1. create():创建节点
2. delete():删除节点
3. setData():设置节点数据
4. getData():获取节点数据
5. checkExists():检查节点是否存在
6. getChildren():获取子节点列表
7. sync():同步节点数据

Watcher

Watcher是ZooKeeper中的一个机制,用于监听节点的变化。当节点发生变化时,Watcher会触发相应的事件,通知客户端进行相应的处理


Watcher与CuratorFramework结合使用的示例代码

public class CuratorWatcherDemo {
    private static final String ZK_ADDRESS = "localhost:2181";
    private static final String ZK_PATH = "/test";

    public static void main(String[] args) throws Exception {
        CuratorFramework client = CuratorFrameworkFactory.newClient(ZK_ADDRESS, new RetryNTimes(3, 1000));
        client.start();

        // 创建节点
        client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath(ZK_PATH, "init".getBytes());

        // 注册Watcher
        client.getData().usingWatcher(new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                System.out.println("Watcher triggered, type=" + event.getType() + ", path=" + event.getPath());
            }
        }).forPath(ZK_PATH);

        // 修改节点数据
        client.setData().forPath(ZK_PATH, "update".getBytes());

        // 删除节点
        client.delete().deletingChildrenIfNeeded().forPath(ZK_PATH);

        client.close();
    }
}

创建了一个CuratorFramework客户端,并使用它创建了一个节点。然后,注册了一个Watcher,用于监听节点的变化。接着,修改了节点的数据,并最终删除了节点。在这个过程中,Watcher会被触发,并输出相应的日志。


ConnectionStateListener

ConnectionStateListener 是 ZooKeeper 客户端连接状态的监听器,用于监听客户端与 ZooKeeper 服务器之间的连接状态变化。当客户端与 ZooKeeper 服务器之间的连接状态发生变化时,ConnectionStateListener 会触发相应的事件,我们可以在事件处理方法中编写相应的业务逻辑。

ConnectionStateListener 常用方法有:

1. void stateChanged(CuratorFramework client, ConnectionState newState):当客户端与 ZooKeeper 服务器之间的连接状态发生变化时,会触发该方法。其中,client 表示 CuratorFramework 客户端对象,newState 表示新的连接状态。

2. void addListener(ConnectionStateListener listener):添加连接状态监听器。

3. void removeListener(ConnectionStateListener listener):移除连接状态监听器。

ConnectionStateListener 与 CuratorFramework 结合使用示例代码:

public class MyConnectionStateListener implements ConnectionStateListener {

    private CuratorFramework client;

    public MyConnectionStateListener(CuratorFramework client) {
        this.client = client;
    }

    @Override
    public void stateChanged(CuratorFramework client, ConnectionState newState) {
        if (newState == ConnectionState.CONNECTED) {
            System.out.println("连接成功");
        } else if (newState == ConnectionState.RECONNECTED) {
            System.out.println("重新连接成功");
        } else if (newState == ConnectionState.LOST) {
            System.out.println("连接丢失");
        } else if (newState == ConnectionState.SUSPENDED) {
            System.out.println("连接挂起");
        } else if (newState == ConnectionState.READ_ONLY) {
            System.out.println("只读连接");
        }
    }
}

public class CuratorFrameworkTest {

    public static void main(String[] args) throws Exception {
        CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new RetryNTimes(3, 1000));
        client.start();
        client.getConnectionStateListenable().addListener(new MyConnectionStateListener(client));
        Thread.sleep(Integer.MAX_VALUE);
    }
}

MyConnectionStateListener 类,实现了 ConnectionStateListener 接口,并在 stateChanged 方法中编写了相应的业务逻辑。然后,在 CuratorFrameworkTest 类中,创建了一个 CuratorFramework 客户端对象,并添加了 MyConnectionStateListener 监听器。最后,让主线程休眠,保证程序不会退出。当客户端与 ZooKeeper 服务器之间的连接状态发生变化时,MyConnectionStateListener 监听器会触发相应的事件,并输出相应的日志信息。

你可能感兴趣的:(zookeeper,分布式,云原生)