java - 我如何知道curator InterProcessSemaphoreMutex丢失后是否被重新获取?

标签 java mutex apache-zookeeper apache-curator

我正在使用InterProcessSemaphoreMutex curator recipe确保我的应用程序进程始终是单例。有时,互斥锁可能会因暂时性网络错误或应用程序暂停(例如,由于 GC)而丢失。 我正在使用重试策略,以便进程可以尝试重新获取锁。如果我的应用程序进程无法在(比如说)5 分钟内重新获取锁定,我希望它退出。

该配方的文档建议我们可以监听 Co​​nnectStateChange 事件。 LOST 事件表示与 Zookeeper 的连接已丢失,因此该进程也丢失了锁。 这样,进程就可以检测它是否失去了锁。

进程如何检查重新获取锁是否成功?我在互斥锁上找不到任何可以为我提供此信息的方法。可疑的有用的“isAcquiredInThisProcess”方法并没有真正给我这些信息。

最佳答案

我不确定您所说的 retryPolicy 是什么意思,某些 curator 对象具有重试策略(例如 DistributedAtomicLong)。

我不明白你如何将它与InterProcessSemaphoreMutex一起使用,但是InterProcessSemaphoreMutex有一个acquire(long time, TimeUnit unit)方法,使用它5分钟不能解决你的问题吗?

关于java - 我如何知道curator InterProcessSemaphoreMutex丢失后是否被重新获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30567870/

相关文章:

java - 滑动窗口 : Implementation and Performance (Java)

java - 谁来设置 JAXWS 2.2 客户端超时

java - 为什么我不能单步执行 Java API 类?

java - 在 Parse 后端查找当前时间和上次更新时间之间的差异

c++ - 锁定 vs (try_lock, sleep, repeat) 性能

dictionary - 如何解决Golang map 的并发访问?

installation - HBase/Zookeeper 安装问题

Ruby 在 semaphore.synchronize block 中返回

apache-storm - 提交拓扑后异常

apache-kafka - Zookeeper : java. io.IOException : No snapshot found, 但有日志条目。有东西坏了