【问题标题】:Hazelcast - IMap how to use quorum for lock operations?Hazelcast - IMap 如何使用仲裁进行锁定操作?
【发布时间】:2017-07-19 08:11:40
【问题描述】:

我想使用 Quorum 对我的地图进行地图锁定操作:myMap。

我对仲裁使用编程配置。

        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 方法来设置 quorum ımpl。

由于 quorum 设置为 xxx,我的地图配置如下所示。

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

问题是,对于锁操作,quorum函数没有被调用。

对于 map put /remove 操作,我看到仲裁功能受到尊重。

com.hazelcast.quorum.QuorumException: Cluster quorum failed at com.hazelcast.quorum.impl.QuorumImpl.newQuorumException(QuorumImpl.java:164) at com.hazelcast.quorum.impl.QuorumImpl.ensureQuorumPresent(QuorumImpl.java:158) at com.hazelcast.quorum.impl.QuorumServiceImpl.ensureQuorumPresent(QuorumServiceImpl.java:127) at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.ensureQuorumPresent(OperationRunnerImpl.java:237) at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:178) at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:120) at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:100) at ------ submitted from ------.(Unknown Source) at java.lang.Thread.getStackTrace(Thread.java:1117) at com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolve(InvocationFuture.java:114) at com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveAndThrowIfException(InvocationFuture.java:75) at com.hazelcast.spi.impl.AbstractInvocationFuture.get(AbstractInvocationFuture.java:155) at com.hazelcast.map.impl.proxy.MapProxySupport.invokeOperation(MapProxySupport.java:373) at com.hazelcast.map.impl.proxy.MapProxySupport.removeInternal(MapProxySupport.java:508) at com.hazelcast.map.impl.proxy.MapProxyImpl.remove(MapProxyImpl.java:211)

但 quorum 不用于锁定操作。

在文档中为锁定操作提供了 xml 配置。

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

示例配置如下:

声明式配置示例:

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

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

此处配置的地图将使用 map-lock-actions-quorum quorum 用于地图锁定操作和其他地图的 map-actions-quorum quorum 行动。

什么是程序化的等价物?

问候

【问题讨论】:

    标签: java locking hazelcast hazelcast-imap


    【解决方案1】:

    以下是为锁定配置 Quorum 的示例:

    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

    【讨论】:

    • 所以我应该将lockConfig的名称设置为我的地图名称?在我的情况下 lockConfig.setName("myMap") ?
    • 您需要适当地设置仲裁名称。请参阅文档中的注释:“如上所述,具有相同名称或与映射名称匹配的模式的锁的仲裁定义将强制映射锁定操作使用定义的仲裁。重要的是要记住这一点使用锁定仲裁和映射锁定操作。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2017-10-29
    相关资源
    最近更新 更多