ZooKeeper客户端Curator使用一 建立链接

如何建立一个ZK链接

工厂方法newClient()

public static void main(String[] args) {
    final String connectString = "127.0.0.1:2181";
    RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
    CuratorFramework client = CuratorFrameworkFactory.newClient(connectString, retryPolicy);
    client.start();
    System.out.println("zk operation");
    client.close();
}

首先,对于ZooKeeper的链接就是建立一个CuratorFramework实例的过程.通常会把CuratorFramework实例的建立交给工厂类CuratorFrameworkFactory,使用工厂方法newClient()方法实例化. 
1. connectString参数是ZooKeeper服务的地址和端口号,对于集群状况下的多个ZooKeeper示例,之间使用逗号分隔.好比apache

String connectString = "127.0.0.1:2181,127.0.0.2:2181,127.0.0.3:2181";
  •  
  1. retryPolicy参数是指在链接ZK服务过程当中从新链接测策略.在它的实现类ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries)中,baseSleepTimeMs参数表明两次链接的等待时间,maxRetries参数表示最大的尝试链接次数
  2. CuratorFramework示例建立完成,表明ZooKeeper已经链接成功,调用start()方法打开链接,在使用完毕后调用close()方法关闭链接
  3. newClient()方法还存在一个重载方法,上面的代码中使用的是newClient(String connectString, RetryPolicy retryPolicy),除该方法外,它还能够指定会话(session)的过时时间以及链接的超时时间.
public static void main(String[] args) {
    final String connectString = "127.0.0.1:2181";
    RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
    CuratorFramework client = CuratorFrameworkFactory.newClient(connectString, 3000, 1000, retryPolicy);
    client.start();
    System.out.println("zk operation");
    client.close();
}

Builder()方法

相比于使用newClient()方法建立链接外,还能够使用builder()方法来控制更多的参数,代码以下:安全

public static void main(String[] args) throws Exception {
    RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
    CuratorFramework client = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181")
            .retryPolicy(retryPolicy).sessionTimeoutMs(1000 * 6).connectionTimeoutMs(1000 * 6).build();
    client.start();
    System.out.println("zk operation");
    client.close();
}

单例模式建立一个ZK链接

在ZooKeeper官网中,有这样一句话:session

You only need one CuratorFramework object for each ZooKeeper cluster you are connectingui

这句话告诉咱们在一个应用中,只须要一个ZK实例就足够了.CuratorFramework实例都是线程安全的,你应该在你的应用中共享同一个CuratorFramework实例.根据ZooKeeper的这个特色,能够选择使用单例模式建立一个ZK链接:spa

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;

public class ClientSingleton {
    private static CuratorFramework client = null;

    private ClientSingleton() {
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
        client = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181").retryPolicy(retryPolicy)
                .sessionTimeoutMs(1000 * 6).connectionTimeoutMs(1000 * 6).build();
    }

    public static synchronized CuratorFramework newClient() {
        if (client == null) {
            new ClientSingleton();
        }
        return client;
    }

    public static void start() {
        client.start();
    }

    public static void close() {
        client.close();
    }
}
相关文章
相关标签/搜索