Hazelcast - strategy/algorithm 用于将锁键与映射值相关联以进行锁监控?
Hazelcast - strategy/algorithm for associating lock keys with map values for lock monitoring?
我有一个要求,我无法找到使用 hazelcast IMap 和 ILock 构造的解决方案。
我需要跟踪通过分布式映射获取的所有锁(成功调用 IMap.tryLock(K key) 后获取的锁)。
每个成功获取的锁都必须 associated/paired 与地图中的自定义对象进行跟踪。 (这些自定义对象包含用于监视目的的特定于应用程序的储物柜信息。)
我想要的是,当成功获取锁时,与锁相关的关联自定义对象必须自动原子地放入地图。
并且当锁被释放时,与锁相关的关联自定义对象必须自动被原子地逐出。
换句话说,我想正确跟踪所有未释放锁的储物柜信息。
我的第一个 attempt/tendency 是实现如下所示的锁定实用程序方法:
public boolean tryLockUtilMethod(String key, long maxTimeToWaitForTheLockInMilis) {
boolean isLockAcquired = false;
try {
isLockAcquired = IMap.tryLock(key, maxTimeToWaitForTheLockInMilis, TimeUnit.MILLISECONDS);
} catch (Exception e) {
...
}
if (isLockAcquired) {
putLockInfoToMapAfterLockAcquire(key);
}
}
和解锁实用方法如下:
public void unlockUtilMethod(String key) {
boolean isUnlockSuccess = false;
try {
IMap.unlock(key);
isUnlockSuccess = true;
} catch (IllegalMonitorStateException e) {
// current thread does not hold the lock
...
} catch (Exception ex) {
...
}
if (isUnlockSuccess) {
removeLockInfoAfterUnlockSuccess(key);
}
}
显然这种方法容易出错,因为锁定 acquire/release 操作和随后的映射放置(在示例代码中的 putLockInfoToMapAfterLockAcquire 方法中)/删除(在示例代码中的 removeLockInfoAfterUnlockSuccess 方法中)操作不是原子的...
我无法找到使用 hazelcast 并发构造的解决方案。
保存锁相关信息并确保它们与锁同步的正确方法是什么?以前没有人有过类似需求吗?
感谢任何指导
AFAIK API 级别不直接支持遍历或获取有关从 Imap 获得的锁的信息 interface.So 我认为您自己做的方式是正确的。对于同步锁信息和锁,您可以使用 hazelcast transactions.
我有一个要求,我无法找到使用 hazelcast IMap 和 ILock 构造的解决方案。
我需要跟踪通过分布式映射获取的所有锁(成功调用 IMap.tryLock(K key) 后获取的锁)。 每个成功获取的锁都必须 associated/paired 与地图中的自定义对象进行跟踪。 (这些自定义对象包含用于监视目的的特定于应用程序的储物柜信息。) 我想要的是,当成功获取锁时,与锁相关的关联自定义对象必须自动原子地放入地图。 并且当锁被释放时,与锁相关的关联自定义对象必须自动被原子地逐出。
换句话说,我想正确跟踪所有未释放锁的储物柜信息。
我的第一个 attempt/tendency 是实现如下所示的锁定实用程序方法:
public boolean tryLockUtilMethod(String key, long maxTimeToWaitForTheLockInMilis) {
boolean isLockAcquired = false;
try {
isLockAcquired = IMap.tryLock(key, maxTimeToWaitForTheLockInMilis, TimeUnit.MILLISECONDS);
} catch (Exception e) {
...
}
if (isLockAcquired) {
putLockInfoToMapAfterLockAcquire(key);
}
}
和解锁实用方法如下:
public void unlockUtilMethod(String key) {
boolean isUnlockSuccess = false;
try {
IMap.unlock(key);
isUnlockSuccess = true;
} catch (IllegalMonitorStateException e) {
// current thread does not hold the lock
...
} catch (Exception ex) {
...
}
if (isUnlockSuccess) {
removeLockInfoAfterUnlockSuccess(key);
}
}
显然这种方法容易出错,因为锁定 acquire/release 操作和随后的映射放置(在示例代码中的 putLockInfoToMapAfterLockAcquire 方法中)/删除(在示例代码中的 removeLockInfoAfterUnlockSuccess 方法中)操作不是原子的...
我无法找到使用 hazelcast 并发构造的解决方案。
保存锁相关信息并确保它们与锁同步的正确方法是什么?以前没有人有过类似需求吗?
感谢任何指导
AFAIK API 级别不直接支持遍历或获取有关从 Imap 获得的锁的信息 interface.So 我认为您自己做的方式是正确的。对于同步锁信息和锁,您可以使用 hazelcast transactions.