curator创建zookeeper客户端代码如下:
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181",
5000,5000,retryPolicy);
client.getConnectionStateListenable().addListener(new ConnectionStateListener() {
@Override
public void stateChanged(CuratorFramework client, ConnectionState newState) {
}
});
client.start();
上述代码是大家经常看见的使用curator框架进行创建zookeeper客户端的过程。主要使用的是CuratorFrameworkFactory#newClient方法进行创建zookeeper的客户端
小园子通过源码下载,查询看到CuratorFrameworkFactory#newClient方法的源码如下:
public static CuratorFramework newClient(String connectString, int sessionTimeoutMs, int connectionTimeoutMs, RetryPolicy retryPolicy)
{
return builder().
connectString(connectString).
sessionTimeoutMs(sessionTimeoutMs).
connectionTimeoutMs(connectionTimeoutMs).
retryPolicy(retryPolicy).
build();
}
/**
点击build()方法代码如下
**/
public CuratorFramework build() {
return new CuratorFrameworkImpl(this);
}
看上述代码是通过一个构造器进行创建了一个CuratorFrameworkImpl对象,然后我们进行查看CuratorFrameworkImpl的构造函数发现,会将创建时候的参数进行一些赋值的操作,里面有一些比较重要的逻辑比方说:
ZookeeperFactory localZookeeperFactory = makeZookeeperFactory(builder.getZookeeperFactory());
第一步就进行创建了zookeeper的工厂方法,我们可以大胆的猜测是通过这个工厂进行创建zookeeper的客户端。
再比如: listeners = new ListenerContainer<CuratorListener>();
这个listeners的创建。这个我们后面再进行分析的操作,我们先继续看在哪里进行创建的zookeeper的客户端,在这里没看到有zookeeper客户端的创建。
public CuratorFrameworkImpl(CuratorFrameworkFactory.Builder builder)
{
ZookeeperFactory localZookeeperFactory = makeZookeeperFactory(builder.getZookeeperFactory());
this.client = new CuratorZookeeperClient
(
localZookeeperFactory,
builder.getEnsembleProvider(),
builder.getSessionTimeoutMs(),
builder.getConnectionTimeoutMs(),
builder.getWaitForShutdownTimeoutMs(),
new Watcher()
{
@Override
public void p

最低0.47元/天 解锁文章
9031

被折叠的 条评论
为什么被折叠?



