ZooKeeper客户端Curator使用一 创建连接
如何创建一个ZK连接工厂方法newClient()public static void main(String[] args) {final String connectString = "127.0.0.1:2181";RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);CuratorFrame
·
如何创建一个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();
}
}
更多推荐
已为社区贡献2条内容
所有评论(0)