博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZooKeeper客户端Curator使用一 创建连接
阅读量:6917 次
发布时间:2019-06-27

本文共 2952 字,大约阅读时间需要 9 分钟。

hot3.png

如何创建一个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";
  •  
  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官网中,有这样一句话:

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();    }}

转载于:https://my.oschina.net/u/2391658/blog/1841651

你可能感兴趣的文章
css去除<img>图片下多余空白区域
查看>>
使用Bind搭建DNS服务
查看>>
IIS7地址重写URL Rewrite Module的使用
查看>>
AWS的性能检测服务X-Ray(APM)
查看>>
django中间件
查看>>
黑色主题-darkgreentrip
查看>>
***帝国数码雨
查看>>
2015.2.15
查看>>
vim编辑器提高篇
查看>>
磁盘管理类命令总结(二)
查看>>
配置Postfix支持虚拟用户
查看>>
js 强制刷新页面(父页面)
查看>>
关于Java加载属性文件放在web容器不好使的解决办法
查看>>
一次生产环境web服务迁移故障总结与反思
查看>>
Linux下安装node.js
查看>>
C# Func与Action总结
查看>>
2016/10/20
查看>>
远程yum和本地yum的安装
查看>>
简单无痛解决Linux下修改/etc/fstab导致无法启动的问题
查看>>
ZFS数据缓存(Part I)
查看>>