您的位置:首页 > 其它

ZooKeeper客户端Curator使用一 创建连接

2017-05-16 21:58 555 查看


ZooKeeper客户端Curator使用一 创建连接

原文 http://blog.csdn.net/yin380697242/article/details/52293771  2016-08-23
21:59:25  641 ℃ 0
评论


如何创建一个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示例,之间使用逗号分隔.比如
String connectString = "127.0.0.1:2181,127.0.0.2:2181,127.0.0.3:2181";

retryPolicy参数是指在连接ZK服务过程中重新连接测策略.在它的实现类ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries)中,baseSleepTimeMs参数代表两次连接的等待时间,maxRetries参数表示最大的尝试连接次数
CuratorFramework示例创建完成,代表ZooKeeper已经连接成功,调用start()方法打开连接,在使用完毕后调用close()方法关闭连接
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官网中,有这样一句话:

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

这句话告诉我们在一个应用中,只需要一个ZK实例就足够了.CuratorFramework实例都是线程安全的,你应该在你的应用中共享同一个CuratorFramework实例.根据ZooKeeper的这个特点,可以选择使用单例模式创建一个ZK连接:
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();
}
}


Tags:zookeeper   Curator   RetryPolic   Framework   zookeeper  


上一篇:先验概率、后验概率以及共轭先验

下一篇:zookeeper 数据与存储源码实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐