我正在使用InterProcessSemaphoreMutex
curator recipe确保我的应用程序进程始终是单例。有时,互斥锁可能会因暂时性网络错误或应用程序暂停(例如,由于 GC)而丢失。
我正在使用重试策略,以便进程可以尝试重新获取锁。如果我的应用程序进程无法在(比如说)5 分钟内重新获取锁定,我希望它退出。
该配方的文档建议我们可以监听 ConnectStateChange 事件。 LOST 事件表示与 Zookeeper 的连接已丢失,因此该进程也丢失了锁。 这样,进程就可以检测它是否失去了锁。
进程如何检查重新获取锁是否成功?我在互斥锁上找不到任何可以为我提供此信息的方法。可疑的有用的“isAcquiredInThisProcess”方法并没有真正给我这些信息。
最佳答案
我不确定您所说的 retryPolicy 是什么意思,某些 curator 对象具有重试策略(例如 DistributedAtomicLong)。
我不明白你如何将它与InterProcessSemaphoreMutex
一起使用,但是InterProcessSemaphoreMutex有一个acquire(long time, TimeUnit unit)
方法,使用它5分钟不能解决你的问题吗?
关于java - 我如何知道curator InterProcessSemaphoreMutex丢失后是否被重新获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30567870/