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";
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(); }
相比于使用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(); }
在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(); } }