Я экспериментирую с добавлением нового узла redis в существующий кластер, когда мое приложение работает (в настоящее время выполняется тестирование производительности), и я получаю кучу "[io.netty.util.concurrent.DefaultPromise.rejectedExecution] [ main] Не удалось отправить задачу уведомления слушателя. Завершение цикла события?
java.lang.OutOfMemoryError java.lang.OutOfMemoryError: невозможно создать новую нить "ошибки.
Вот код для подключения к кластеру:
final List<RedisURI> redisServerSeeds = Lists.newArrayList();
for(final HostAndPort redisServer: redisClusterServers) {
final RedisURI redisUri = RedisURI.Builder
.redis(redisServer.getHostText(), redisServer.getPort())
.withPassword(mayBeRedisPwd.orElse(""))
.build();
redisServerSeeds.add(redisUri);
}
final ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
.enablePeriodicRefresh(Duration.ofSeconds(60)) // Configuration for periodic refresh
.enableAllAdaptiveRefreshTriggers()
.adaptiveRefreshTriggersTimeout(Duration.ofSeconds(30)) // Configuration for adaptive refresh
.closeStaleConnections(true)
.dynamicRefreshSources(true)
.build();
// Setup Redis Client
final RedisClusterClient client = RedisClusterClient.create(redisServerSeeds);
client.setOptions(ClusterClientOptions.builder()
.topologyRefreshOptions(topologyRefreshOptions)
.autoReconnect(true)
.pingBeforeActivateConnection(true)
.validateClusterNodeMembership(true)
.build());
А вот код доступа к данным:
return asyncCommands.mget(keySet.toArray(new Long[0])).get(
5, TimeUnit.SECONDS
).stream().filter(keyValue -> keyValue.hasValue()).
map(keyValue -> keyValue.getValue()).collect(Collectors.toSet());
Эти ошибки появляются только после масштабирования кластера redis. Что я делаю неправильно? Как избежать ошибок OOME при масштабировании кластера?