Apache Curator中的Connection Guarantees(连接保证)

版权声明:*************本文为博主原创文章,未经许可不得转载************* https://blog.csdn.net/oDaiLiDong/article/details/87909633

Curator不断监控与ZooKeeper集合的连接。此外,每个操作都包含有重试机制。因此,可以做出以下保证:

  • 每个Curator操作都会好好的等待,直到与ZooKeeper建立连接
  • 每个Curator操作(create,getData等)都保证按照当前设置的重试策略管理连接丢失和会话过期
  • 如果连接暂时丢失,Curator将尝试重试该操作,直到按照当前设置的重试策略成功
  • 所有Curator都试图以适当的方式处理连接问题

通知

Curator为客户端公开了几个可监听的接口,以监控ZooKeeper连接的状态。

连接中断时调用ConnectionStateListener。客户可以监控这些变化并采取适当的措施。这些是可能的状态变化:

CONNECTED 发送第一次成功连接到服务器。注意:您只能为任何CuratorFramework实例获取这些消息之一。
READONLY 连接已进入只读模式。只有在CuratorFrameworkFactory.Builder.canBeReadOnly()传递true时才会发生这种情况。有关只读连接,请参阅ZooKeeper文档:https//wiki.apache.org/hadoop/ZooKeeper/GSoCReadOnlyMode。连接将保持只读模式,直到发送另一个状态更改。
SUSPENDED 失去联系。领导者,锁等应该暂停,直到重新建立连接。
RECONNECTED 已重新建立暂停或丢失的连接。
LOST

Curator在认为ZooKeeper会话已过期时将设置LOST状态。ZooKeeper连接有一个会话。会话到期时,客户端必须采取适当的措施。在Curator中,由于Curator内部管理ZooKeeper连接,这很复杂。当发生以下任何一种情况时,Curator将设置LOST状态:

a)ZooKeeper返回Watcher.Event.KeeperState.Expired或KeeperException.Code.SESSIONEXPIRED; 

b)Curator关闭内部管理的ZooKeeper实例; 

c)网络分区期间会话超时。在此之后可能会获得RECONNECTED状态,但您仍应将任何锁等视为脏/不稳定。

注意:自Curator 3.0.0以来,LOST的含义已经改变。3.0.0之前LOST仅表示重试策略已过期。

当后台任务等捕获异常时,将调用UnhandledErrorListener。一般而言,Curator用户在记录时不应该关心这些。但是,如果您愿意,可以听取它们。

错误政策

Curator有一个可插入的错误政策。默认策略采用保守方法以相同方式处理连接状态SUSPENDED和LOST。即,当配方看到状态更改为SUSPENDED时,它将假定ZooKeeper会话丢失并将清理所有观察者,节点等。但是,您可以通过将错误策略设置为仅处理LOST来选择更积极的方法(即真正的会话丢失)作为错误状态。通过:connectionStateErrorPolicy(new SessionConnectionStateErrorPolicy())在CuratorFrameworkFactory中执行此操作。

 

参考:https://curator.apache.org/errors.html

展开阅读全文

没有更多推荐了,返回首页