apache-zookeeper - 从 ConnectionStateListener 处理 curator SUSPEND 状态的最佳方法

标签 apache-zookeeper apache-curator

我想问一个有关处理 SUSPEND 状态的问题。

这是背景:

我正在使用 curator/zk 作为并发运行作业列表的任务协调器。 每分钟,每个工作线程(每个工作运行在单独的虚拟机上)尝试通过调用以下方式从 zk 获取任务(锁):

lock = new InterProcessSemaphoreMutex(zkClient, task); 
boolean hasLock = false;
hasLock = lock.acquire(1, TimeUnit.SECONDS);

如果工作获得锁定,它将执行任务。

负责检索器锁/任务的类实现 ConnectionStateListener 接口(interface)。以下是当前的实现:

  • RECONNECT:不执行任何操作,因为工作线程将尝试获取锁 无论ZK连接状态如何。

  • LOST:释放锁定,因为连接丢失。

  • 暂停:??????

我的问题是关于SUSPEND状态,进入SUSPEND时我应该释放锁(基本上,视为丢失)还是做其他事情?

处理 SUSPEND 状态的最佳实践是什么?

谢谢

最佳答案

我猜你已经看到了本文末尾的评论page .

It is strongly recommended that you add a ConnectionStateListener and watch for SUSPENDED and LOST state changes. If a SUSPENDED state is reported you cannot be certain that you still hold the lock unless you subsequently receive a RECONNECTED state. If a LOST state is reported it is certain that you no longer hold the lock.

我将此解释为:您保持锁定直到收到RECONNECTED状态,除非您的连接LOST并且锁定被释放。

关于apache-zookeeper - 从 ConnectionStateListener 处理 curator SUSPEND 状态的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26927589/

相关文章:

java - 当我使用 CuratorFrameworkFactory.newClient() 时,获取 KafkaConsumer 对于多线程访问错误是不安全的

hadoop - session 超时值后为何临时节点未从Zookeeper中删除

apache-zookeeper - Zookeeper如何同步集群中的时钟

java - Zookeeper 多领导选举问题

kubernetes - Kafka无法连接到EKS上的Zookeeper集成

apache-zookeeper - Apache Zookeeper 数据持久性。使用 CreateMode.Persistent 创建的节点能否在整个集群重新启动后继续存在?

java - Apache Curator DistributedQueue 的 lockPath 是如何工作的?

apache-zookeeper - 一个大型项目中必须创建多少个 CuratorFramework?

java - ZooKeeper 每个节点的最大子节点数

spring - Zookeeper 与 Spring Cloud 配置服务器有什么区别?