源码分析
- 连接丢失的处理
Curator中利用类ConnectionState来管理客户端到ZooKeeper集群的连接状态,其中用到原子布尔型变量来标识当前连接是否已经建立:
private final AtomicBoolean isConnected=new AtomicBoolean(false);
在事件处理函数中(ConnectionState实现了Watcher接口)修改isConnected的值:
@Override
public void process(WatchedEvent event)
{
//逐个调用parentWatchers容器中的Watcher的process函数
for ( Watcher parentWatcher :parentWatchers )
{
TimeTrace timeTrace = new TimeTrace("connection-state-parent-process",tracer.get());
parentWatcher.process(event);
timeTrace.commit();
}
//记录旧连接状态
boolean wasConnected =isConnected.get();
boolean newIsConnected = wasConnected;
if ( event.getType() ==Watcher.Event.EventType.None ){
//获取新连接状态
newIsConnected =checkState(event.getState(), wasConnected);
}
//若状态发生变化,则修改
if ( newIsConnected != wasConnected ){
isConnected.set(newIsConnected);
connectionStartMs = System.currentTimeMillis();
}
}
其中checkState函数获取当前连接状态是否为已连接:
private boolean checkState(Event.KeeperState state, boolean wasConnected){
boolean isConnected = wasConnected;
boolean checkNewConnectionString =