当前位置: 首页 > 知识库问答 >
问题:

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

谷博艺
2023-03-14

我想对我的映射myMap使用Quorum进行映射锁定操作。

我对仲裁使用编程配置。

        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方法来设置仲裁。

我的地图配置如下,因为仲裁设置为xxx。

MapConfig{name='myMap',inMemoryFormat=BINARY',..,mapAttributeConfigs=null,quorumName=xxx,queryCacheConfigs=null,CacheDeserializedValue=仅索引}

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

对于map put /remove操作,我看到仲裁函数得到了尊重。

------ QuorumException:群集仲裁失败在 ------.( QuorumIjava.lang.QuorumIhread.get)在hread.java:1117QuorumIcom.hazelcast.spi.impl.operationservice.impl.QuorumPresent(QuorumIuture.resolve)在uture.java:114QuorumServiceIcom.hazelcast.spi.impl.operationservice.impl.QuorumServiceIuture.resolve)在uture.java:75操作RunnerIcom.hazelcast.spi.impl.QuorumPresent(操作RunnerIuture.get)在com.hazelcast.spi.impl.operationservice.impl.操作RunnerImpl.run(操作RunnerImpl.java:178)在com.hazelcast.spi.impl.operationexecutor.impl.操作hread.process(操作hread.java:120)在com.hazelcast.spi.impl.operationexecutor.impl.操作hread.run(操作hread.java:100)在com.hazelcast.quorum.从com.hazelcast.quorum.impl.未知来源提交)在mpl.newTmpl.java:164StackTrace(Tcom.hazelcast.quorum.impl.)在mpl.ensureInvocationFmpl.java:158(InvocationFcom.hazelcast.quorum.impl.)在mpl.ensureInvocationFmpl.java:127和ThrowIfException(InvocationFcom.hazelcast.spi.impl.operationservice.impl.)在mpl.ensureAbstractInvocationFmpl.java:237(AbstractInvocationFuture. java: 155)在com. hazelcast. map. impl. proxy. MapProxySupport.发票(MapProxySupport.

但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-acties-quorum仲裁,对其他映射操作使用map-acties-quorum仲裁。

与此对应的编程是什么?

当做


共有1个答案

包谭三
2023-03-14

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

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-配置

 类似资料:
  • 我正在使用Hazelcast Imap接口以分布式方式锁定项目,而不是将项目放在map中,我只是调用lock方法,它似乎有效,但我不知道如何查询哪些项目当前被锁定,因为项目在map中不可用。有没有方法可以查询Hazelcast锁定的键?下面是示例代码:public void testMap_DistributedLock(){final Config hazelcastConfig=new Con

  • 为仲裁模式选定足够的服务器是很重要的。无论系统延迟和奔溃,仲裁者必须保证任何的更新请求Zookeeper都会积极的响应并保存,直到另外一个请求取代它。 这个例子就是在第一章提到过的脑裂场景之一。为了避免这个问题,这个例子中仲裁者的数量不得低于三个,这是五台服务器的大多数。为了继续运行,整个Zookeeper集合必须保证三台服务器可用。为了确认更新请求已经成功的完成了,Zookeeper集合需要至少

  • 幸运的是,即使我们只有一台机器也能运行多个服务器。我们只需要建立一个更高级的配置文件。 为了让服务器之间相互联系,它们需要一些联系人的信息。理论上服务器可以通过多播协议来发现对方,但是我们支持除了单一网络外运行Zookeeper集合分散在多个网络中以支持多个Zookeeper集合。 图2-7 客户端重连接例子 initLimit=10 dataDir=./data server.2=127.0.0

  • 我需要在没有任何其他线程拦截的情况下同时锁定一些地图项目。我的意思是我想锁定10个项目,我想我需要使用循环,但我不想在锁定第5个项目后被阻止锁定其余5个项目。我是否需要使用另一个映射独立锁来包装锁定代码块?

  • 我正在使用ApachePOI将数据写入Excel文件,我希望第一行为只读,其他行可以随时编辑。但我没有找到有效的解决方法。 下面是我的代码: 看起来这个java代码块应该可以工作,但实际上它不仅会锁定第一行,还会锁定其他行的空单元格。 所以我想知道,有没有一种有效的方法可以使用apachepoi只锁定excel文件的第一行?