java - Hazelcast - IMap 如何使用仲裁进行锁定操作?

标签 java locking hazelcast hazelcast-imap

我想使用 Quorum 为我的 map :myMap 进行 map 锁定操作。

我使用编程配置进行仲裁。

        QuorumConfig quorumConfig = new QuorumConfig();
        quorumConfig.setName("xxx");
        quorumConfig.setEnabled(true);

        quorumConfig.setQuorumFunctionImplementation(new QuorumFunction() {
            @Override
            public boolean apply(Collection<Member> members) {
                ...
            }
        });

我使用 com.hazelcast.config.MapConfig.setQuorumName 方法来设置仲裁 mpl。

我的 map 配置如下所示,因为法定人数设置为 xxx。

MapConfig{name='myMap', inMemoryFormat=BINARY', ...., mapAttributeConfigs=null, quorumName=xxx, queryCacheConfigs=null, cacheDeserializedValues=INDEX_ONLY}

问题是,对于锁定操作,不会调用仲裁函数。

对于映射放置/删除操作,我发现仲裁功能受到尊重。

com.hazelcast.quorum.QuorumException:集群仲裁失败 在 com.hazelcast.quorum.impl.QuorumImpl.newQuorumException(QuorumImpl.java:164) 在com.hazelcast.quorum.impl.QuorumImpl.ensureQuorumPresent(QuorumImpl.java:158) 在com.hazelcast.quorum.impl.QuorumServiceImpl.ensureQuorumPresent(QuorumServiceImpl.java:127) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.ensureQuorumPresent(OperationRunnerImpl.java:237) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:178) 在 com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:120) 在 com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:100) 在 ------ 提交自 ------。(来源不明) 在 java.lang.Thread.getStackTrace(Thread.java:1117) 在 com.hazelcast.spi.impl.operationservice.impl.InitationFuture.resolve(InitationFuture.java:114) 在 com.hazelcast.spi.impl.operationservice.impl.InitationFuture.resolveAndThrowIfException(InitationFuture.java:75) 在 com.hazelcast.spi.impl.AbstractInvocauFuture.get(AbstractInvocauFuture.java:155) 在com.hazelcast.map.impl.proxy.MapProxySupport.invokeOperation(MapProxySupport.java:373) 在com.hazelcast.map.impl.proxy.MapProxySupport.removeInternal(MapProxySupport.java:508) 在 com.hazelcast.map.impl.proxy.MapProxyImpl.remove(MapProxyImpl.java:211)

但是仲裁不用于锁定操作。

在文档中,给出了用于锁定操作的 xml 配置。

http://docs.hazelcast.org/docs/latest-development/manual/html/Distributed_Data_Structures/Map/Locking_Maps.html

Example config is given as:

An example of declarative configuration:

<map name="myMap">
  <quorum-ref>map-actions-quorum</quorum-ref>
</map>

<lock name="myMap">
    <quorum-ref>map-lock-actions-quorum</quorum-ref>
</lock>

Here the configured map will use the map-lock-actions-quorum quorum for map lock actions and the map-actions-quorum quorum for other map actions.

与此相对应的程序是什么?

问候

最佳答案

以下是配置锁定仲裁的示例:

Config config = new Config();
LockConfig lockConfig = new LockConfig();
lockConfig.setName("myLock")
          .setQuorumName("quorum-name");
config.addLockConfig(lockConfig);

查看链接了解详细信息:http://docs.hazelcast.org/docs/3.8.3/manual/html-single/index.html#lock-configuration

关于java - Hazelcast - IMap 如何使用仲裁进行锁定操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45184635/

相关文章:

java - 使用 GSON 解析带有键和选项卡的 JSON 文件

java - 把混淆过的代码重新混淆是不是错了?

java - 我是否需要为具有登录系统的 Web 应用程序实现 OAuth 服务器?

hazelcast - 防止对 Hazelcast Community Edition 集群进行不必要的访问

java - 使用 swap 方法反转泛型 LinkedList

Postgresql 函数卡在 for 循环中

c - 在单写入多读取系统中我们需要锁吗?

mysql - 解锁 Oracle 表

java - Hazelcast MapStrore#store()

java - Hazelcast 近缓存无法使用简单示例