【问题标题】:Hazelcast MapStoreConfig ignoredHazelcast MapStoreConfig 被忽略
【发布时间】:2014-01-27 11:03:26
【问题描述】:

我正在使用地图存储将我的 hazelcast 分布式地图保存在数据库中。

在我的测试用例中,我启动了三个 hazelcast 实例,每个实例的配置方式相同:

Config cfg = new Config();
cfg.setInstanceName("name");
hazelcast = Hazelcast.newHazelcastInstance(cfg);    
MapConfig mapConfig = new MapConfig("myMapName");
MapStoreConfig mapStoreConfig = new MapStoreConfig();
mapStoreConfig.setClassName(MyMapStore.class.getName());
mapStoreConfig.setWriteDelaySeconds(0);
mapStoreConfig.setEnabled(true);
mapConfig.setMapStoreConfig(mapStoreConfig);
mapConfig.setBackupCount(2);
hazelcast.getConfig().addMapConfig(mapConfig);
IMap myMap = hazelcast.getMap("myMapName");

但是,当我向地图添加值时,只有第一个集群成员写入数据库,MapStoreConfig 只是在其他节点上设置为默认值。 但是,如果我将代码更改为以下内容,它可以工作:

Config cfg = new Config();
cfg.setInstanceName("name");
MapConfig mapConfig = new MapConfig("myMapName");
MapStoreConfig mapStoreConfig = new MapStoreConfig();
mapStoreConfig.setClassName(MyMapStore.class.getName());
mapStoreConfig.setWriteDelaySeconds(0);
mapStoreConfig.setEnabled(true);
mapConfig.setMapStoreConfig(mapStoreConfig);
mapConfig.setBackupCount(2);
cfg.addMapConfig(mapConfig);
hazelcast = Hazelcast.newHazelcastInstance(cfg);
IMap myMap = hazelcast.getMap("myMapName");

似乎hazelcast.getConfig().addMapConfig(mapConfig); 行被忽略了。 使用 hazelcast v3.1.5 测试。

【问题讨论】:

    标签: java hazelcast


    【解决方案1】:

    据我了解,Config 实例应该只被视为一种“模板”,用于创建一个实例,但可能不用于之后修改 em> 这个实例。虽然,根据快速的网络搜索和查看文档,这没有明确说明,但是

    1. 到目前为止我看到的所有示例都遵循 FIRST 创建和完整 Config 的模式,然后创建相应的实例和
    2. addMapConfig 方法(在https://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/main/java/com/hazelcast/config/Config.java 中)不涉及任何通知机制。因此,至少必须有某种机制来通知 Hazelcast 实例有关更改的配置,但我认为这种机制不存在。

    根据我在源代码中阅读的内容(例如在 https://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/main/java/com/hazelcast/instance/Node.javahttps://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/main/java/com/hazelcast/instance/HazelcastInstanceImpl.java 中),Config 仅在构建时 read ,并且似乎无法更改Hazelcast 实例创建之后的配置

    【讨论】:

    • 马尔科是对的。模板并非设计为在创建后进行修改。我们将在未来添加即时配置,但没有计划使当前配置可更新。
    【解决方案2】:

    在运行时配置 Hazelcast 的能力很方便,但很容易产生误导。我使用 Spring,所以我一直对配置的概念非常清楚。在大多数系统(Hazelcast 也不例外)中,应该在实例化“引擎”之前指定配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2016-06-05
      • 2014-02-25
      • 2011-05-09
      • 2015-02-08
      相关资源
      最近更新 更多