1

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

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

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

4

1 回答 1

0

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

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

于 2015-06-17T14:13:28.437 回答