如果我有多个使用相同IMap的Hazelcast集群成员,并且我想以编程方式以特定方式配置IMap,那么我是否需要在所有成员中拥有配置代码,或者是否应该足以配置只在其中一个成员中编码一次?
换句话说,MapConfigs只是特定于成员还是群集范围?
为什么我要问的是Hazelcast文档http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#configuring-programmatically
说
随着动态添加的数据结构配置传播 所有集群成员,由于条件等原因可能会发生故障 超时和网络分区。配置传播机制 内部重试在成员资格时添加配置 检测到变化。
这让我觉得配置会传播。
现在,如果成员A为IMap" testMap"指定某个MapConfig,那么成员B是否应该看到该配置
hzInstance.getConfig.findMapConfig("testMap") #or .getMapConfig("testMap")
在我的测试中,B没有看到A完成MapConfig。
我也尝试在A mapConfig.TimeToLiveSeconds(60)和B mapConfig.TimeToLiveSeconds(10)指定。
似乎A拥有的IMap中的物品在60秒内被驱逐,而B拥有的物品在10秒内被驱逐。如果我想要IMap的一致行为,这支持每个成员需要执行相同配置的想法。
答案 0 :(得分:0)
每个成员都拥有IMap的某些分区。成员的IMap配置仅对其拥有的分区有效。 因此,当具有不同配置时,在不同成员中看到相同地图的条目的不同TTL值是正常的。 正如您所说,所有成员都应具有相同的IMap配置,以具有群集范围的持久行为。 否则,每个成员将自己的配置应用于自己的分区。
但是,如果按照here所述添加动态配置,那么该配置将传播到所有成员并更改其行为。
简而言之,如果在创建实例之前添加配置,那就是本地配置。但是,如果在创建实例后添加它,那就是动态配置并传播到所有成员。