Hazelcast 不会在节点启动时填充 ReplicatedMap
Hazelcast does not populate ReplicatedMap at node startup
这是我们的 ClusterStorage 代码,它包装了 Hazelcast
。
public ClusterStorage clusterStorage() {
Config config = new Config();
String mapName = "cluster-storage";
ReplicatedMapConfig mapConfig = config.getReplicatedMapConfig(mapName);
mapConfig.setInMemoryFormat(InMemoryFormat.BINARY);
config.getGroupConfig()
.setName("name")
.setPassword("pass");
HazelcastInstance instance = Hazelcast.newHazelcastInstance(config);
return new ClusterStorage(instance.getReplicatedMap(mapName));
}
当我在两个节点都启动时更改映射时,更改会被复制,但是当我在节点 n1 上更改映射然后启动第二个节点 n2 时,n1 的状态不会被复制并且 n2 节点具有空映射。
我想这应该可行,对吧?
可能出了什么问题?
不保证两个地图会同步:
Lost or missing updates are neither tracked nor resent
http://docs.hazelcast.org/docs/3.5/manual/html/replicatedmap.html
我做到了。我的发现:
问题是版本 3.7.1 和 3.5.5 的组合来自 Maven pom.xml
的依赖管理。我们不知道 Spring Boot 的导入依赖管理还定义了 hazelcast
具有不同版本的工件,这反过来可能导致不兼容的库位于 class 路径上。
这是我们的 ClusterStorage 代码,它包装了 Hazelcast
。
public ClusterStorage clusterStorage() {
Config config = new Config();
String mapName = "cluster-storage";
ReplicatedMapConfig mapConfig = config.getReplicatedMapConfig(mapName);
mapConfig.setInMemoryFormat(InMemoryFormat.BINARY);
config.getGroupConfig()
.setName("name")
.setPassword("pass");
HazelcastInstance instance = Hazelcast.newHazelcastInstance(config);
return new ClusterStorage(instance.getReplicatedMap(mapName));
}
当我在两个节点都启动时更改映射时,更改会被复制,但是当我在节点 n1 上更改映射然后启动第二个节点 n2 时,n1 的状态不会被复制并且 n2 节点具有空映射。
我想这应该可行,对吧? 可能出了什么问题?
不保证两个地图会同步:
Lost or missing updates are neither tracked nor resent
http://docs.hazelcast.org/docs/3.5/manual/html/replicatedmap.html
我做到了。我的发现:
问题是版本 3.7.1 和 3.5.5 的组合来自 Maven pom.xml
的依赖管理。我们不知道 Spring Boot 的导入依赖管理还定义了 hazelcast
具有不同版本的工件,这反过来可能导致不兼容的库位于 class 路径上。