Могу ли я попросить вас помочь в том, как перебрать mapConfig, чтобы изменить количество резервных копий работающего Hazelcast, настроенного из класса ClientConfig?
Я проверил примеры кода hazelcast, но во всех случаях количество резервных копий задается в конфигурации. Я также пытался применить код подсчета резервных копий из этого stackoverflow (о котором, кстати, я спросил сам), но я столкнулся с UnsupportedOperationException, потому что кажется, что экземпляр Hazelcast ClientConfig не может измениться во время выполнения, это правильно? Есть ли обходной путь для этого/предложение о том, как это преодолеть?
У меня есть следующая реализация:
ClientConfig cfg = new ClientConfig();
if (hazelcastConfPath != null) {
cfg = new XmlClientConfigBuilder(hazelcastConfPath).build();
}
cfg.setProperty("hazelcast.logging.type", "slf4j");
hazelcastInstance = HazelcastClient.newHazelcastClient(cfg);
int clusterSize = hazelcastInstance.getCluster().getMembers().size();
logger.info("Cluster size: {}", clusterSize);
for (Entry<String, MapConfig> currMap : hazelcastInstance.getConfig().getMapConfigs().entrySet()) {
if (clusterSize - 1 > 1) {
try {
currMap.getValue().setBackupCount(clusterSize);
} catch (Exception e) {
logger.warn(e.getMessage(), e);
}
}
logger.info("Map {} configured with {}", currMap.getKey(), currMap.getValue().getBackupCount());
}
и XML-конфигурация Hazelcast:
<?xml version = "1.0" encoding = "UTF-8"?>
<hazelcast ...>
<network>
<port auto-increment = "false">${hazelcast.port}</port>
</network>
<management-center enabled = "true" update-interval = "3">
${hazelcast.mancenter.url}
</management-center>
<group>
<name>${group.name}</name>
<password>${group.password}</password>
</group>
<map name = "*token">
<max-idle-seconds>120</max-idle-seconds>
<backup-count>1</backup-count>
<eviction-policy>LRU</eviction-policy>
</map>
<map name = "*actionSessionRedirUrlMap">
<max-idle-seconds>30</max-idle-seconds>
<backup-count>1</backup-count>
<eviction-policy>LRU</eviction-policy>
</map>
</hazelcast>
При этом у меня возникает исключение UnsupportedOperationException, похоже, это невозможно :'(
java.lang.UnsupportedOperationException: Client config object only supports adding new data structure configurations
at com.hazelcast.client.impl.clientside.ClientDynamicClusterConfig.getMapConfigs(ClientDynamicClusterConfig.java:591)
...
Большое спасибо, Джеральдо Нетто
Вы можете добиться этого либо через центр управления (https://docs.hazelcast.org/docs/management-center/latest/manual/html/index.html#deploying-and-starting), либо запустив облегченный -member с новым MapConfig с тем же именем, но другим количеством резервных копий. См. пример ниже:
MapConfig mapConfig = new MapConfig("map_a");
mapConfig.setBackupCount(3);
Config config = new Config();
config.setLiteMember(true);
config.addMapConfig(mapConfig);
HazelcastInstance lite = Hazelcast.newHazelcastInstance(config);