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.