Curator连接和重试机制分析

本文深入分析了Curator在处理ZooKeeper连接丢失和会话终止时的策略。当连接丢失,Curator会使用重试机制,判断异常类型并决定是否重试操作。在会话终止时,Curator通过监听Expired事件,重建ZooKeeper句柄以恢复连接。整个过程确保了在异常情况下仍能正确执行ZooKeeper操作。
摘要由CSDN通过智能技术生成

源码分析

  • 连接丢失的处理
    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 =
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值